我有一个多次调用的角度服务功能。 在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