我有一個多次調用的角度服務功能。 在index.html
頁,我有以下行:多次調用角度服務功能
<li><i class="pull-right"></i><br/>{{appCtrl.service.getCurrentUser()}} </li>
在應用程序控制器我設置變量
appCtrl.controller('AppController', function ($state, securityService, $log) {
$log.info('App controller');
var appCtrl = this;
appCtrl.service = securityService;
});
在我的服務我暴露功能
login.factory('securityService', function ($window, $log) {
var currentUser;
return {
setCurrentUser: function (user) {
currentUser = user;
$window.sessionStorage.setItem('User', JSON.stringify(currentUser));
},
getCurrentUser: function() {
$log.info('Calling current user');
if (!currentUser) {
var storedObject = $window.sessionStorage.getItem('User');
currentUser = JSON.parse(storedObject);
}
return currentUser;
}
}
});
下面一行在應用程序啓動或頁面刷新完成時,getCurrentUser
函數被多次調用。
$log.info('Calling current user');
控制器是被稱爲只有一次,我通過看$log.info('App controller');
監視它也被稱爲髒檢查過程的一部分,還是我做錯了什麼?
嗨,與功能設置爲可變問題應用程序控制器是應用程序控制器通過應用程序啓動將該變量設置爲初始值(未定義)。當工廠的setCurrentUser被登錄控制器調用時,應用程序控制器中的變量不會被更新。 – Rentius2407
然後我會使用一些標準的事件機制(所有這$廣播/ $發射/ $的東西)更新其他控制器時,用戶值更新登錄控制器。 – udalmik
謝謝udalmik,我已經參加了$廣播和$對策略。它適用於我的場景。 – Rentius2407