$scope变量未定义,尽管它是在$watch函数内部设置的
$scope variable being undefined despite being set inside a $watch function
我试图使用用户的uid
将一些内容插入到Firebase数据库中,但由于某种原因,它没有定义。看看下面的代码:
页面加载时设置用户数据信息(authData
)的主控制器:
flickrApp.controller('mainCtrl', ['$scope', '$rootScope', '$firebase', 'Auth', 'shared', function($scope, $rootScope, $firebase, Auth, shared) {
Auth.$onAuth(function(authData) {
shared.setAuth(authData);
$scope.authData = shared.getAuth();
});
}]);
处理身份验证状态并在我的控制器之间共享的服务:
flickrApp.service('shared', function() {
var authentication = false;
return {
getAuth: function () {
return authentication;
},
setAuth: function (auth) {
authentication = auth;
}
};
});
这是它不起作用的地方,在我的标签控制器中。$scope.authData
在$watch
函数中设置正确,但当我尝试在var ref
行中使用它时,它表示$scope.authData
未定义(因此我无法访问uid
)。我不明白为什么这不起作用。
我是否也必须将$apply
与观察程序功能一起使用,或者哪里出了问题?
flickrApp.controller('tagsCtrl', ['$scope', '$rootScope', '$firebase', 'shared', function($scope, $rootScope, $firebase, shared) {
$scope.tagsList = [];
$scope.shared = shared;
$scope.$watch('shared.getAuth()', function(authData) {
$scope.authData = authData;
console.log($scope.authData);
});
var ref = new Firebase ('https://flickr.firebaseio.com/users/' + $scope.authData.uid);
var sync = $firebase(ref);
$scope.addTag = function(tag) {
$scope.tagsList.push(tag);
sync.$set({favoriteTags: $scope.tagsList});
}
}]);
我认为问题是,在$watch中设置$scope.authData的数据之前,对ref的赋值已经完成。尝试将您的代码更改为:
flickrApp.controller('tagsCtrl', ['$scope', '$rootScope', '$firebase', 'shared', function($scope, $rootScope, $firebase, shared) {
$scope.tagsList = [];
$scope.shared = shared;
var ref,sync;
$scope.$watch('shared.getAuth()', function(authData) {
$scope.authData = authData;
console.log($scope.authData);
if($scope.authData){
ref = new Firebase ('https://flickr.firebaseio.com/users/' + $scope.authData.uid);
sync = $firebase(ref);
}
});
$scope.addTag = function(tag) {
$scope.tagsList.push(tag);
sync.$set({favoriteTags: $scope.tagsList});
}
}]);
相关文章:
- 比较$watch函数内的基元类型时出错
- $location.search() - 如何在 $scope.$watch 函数中使用作用域中的参数
- 了解窗口调整大小事件与 scope.$apply 与函数$watch
- 有没有一种方法可以让watch函数获取被监视文件的名称
- 仅在focusout字段之后调用$scope.watch函数
- $scope变量未定义,尽管它是在$watch函数内部设置的
- watch()函数无法在json调用上使用angular.js
- 在承诺函数从 pouchdb 填充数据之前触发 Ionic/Angular $watch的问题
- $scope.$watch(var,function) undefined 不是函数
- 不断在 $scope.$watch 函数中收到“类型错误:无法读取 null 的属性'值'”
- 在角度 api 中$watch返回一个取消注册函数,用于此侦听器取消注册的含义是什么
- 递归服务函数上的角度$watch
- $scope.watch() 在链接函数中
- AngularJS $scope.$watch Jasmine 测试中未定义的回调函数参数
- AngularJS $watch 不等待触发器发生,而是在回调函数中执行$scope
- 如何在核心javascript中实现angular$watch函数
- AngularJs-在一个$watch函数中有多个应用/摘要周期
- AngularJS:在$watch函数中修改模型
- $watch函数给出了undefined
- 清除$watch函数中的作用域变量