我在 angularjs 中有以下代码,.run()
所以当应用程序初始时,我在 rootScope 下设置了 2 个变量。因为这些变量我决定在每个路由(页面)和控制器中使用。
异步
app.run(function($rootScope, $timeout, firebaseAuth) {
$rootScope.$on('firebaseLoggedIn', function(event, authUser) {
$timeout(function() {
$rootScope._isLoggedIn = true;
$rootScope._authUser = authUser;
},0);
});
但是这里的问题是,当我在控制器中运行它时,它总是显示未定义。
除非我把它放在功能块中。所以我的猜测是控制器在.run()
变量有价值之前运行;
app.controller('foo', function($scope){
console.log($scope._authUser); //Always undefined
//unless I do following
//$scope.clickme = function() {console.log($scope._authUser)};
});
有什么建议我可以使用 .run() 中的 vars(async) 吗?
如果我在每个控制器中调用以下代码,似乎我一直在重复自己。
$rootScope.$on('firebaseLoggedIn', function(event, authUser) {});
更新 这是 firebaseLoggedIn 事件的来源。我想我不得不再次提及。回调是异步的。
app.service('firebaseAuth', ['$rootScope',
function($rootScope) {
//Define firebase DB url
this.firebaseRef = new Firebase("https://test.firebaseio.com");
this.onLoginStateChanges = new FirebaseAuthClient(this.firebaseRef, function(error, user) {
if (user) {
$rootScope.$emit("firebaseLoggedIn", user); //authenticated user
}
else if (error) {
$rootScope.$emit("firebaseLoginError", error); //authentication failed
}
else {
$rootScope.$emit("firebaseLogout"); //user not login
}
});
}]);