我在angularjs中有以下代碼.run()
所以當應用程序初始時,我在rootScope下設置了2個變量。 因爲我決定在每個路線(頁面)和控制器中使用這些變量。 異步如何在其他控制器中重新使用angularjs初始化變量
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()中的變量(異步)?
如果我在每個控制器中調用下面的代碼,似乎我不斷重複自己。
$rootScope.$on('firebaseLoggedIn', function(event, authUser) {});
UPDATE 這是從哪兒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
}
});
}]);
我試過但沒有工作。在控制器中'FirebaseService.getIsLoggedIn()'返回false。我認爲是因爲它沒有聽取firebaseLoggedIn事件。請再次檢查我的問題。我更新了它 – vzhen
嘗試更改您的$ rootScope。$ emit到$ rootScope。$ broadcast。 $ emit是通過範圍向上調度事件,$ broadcast是向下調度。 –
沒有運氣,也返回false – vzhen