我正面临着竞争状况。其中一项服务是使用ui-router更改视图,然后从$ rootscope广播事件。控制器的范围(与更改的视图相关联)正在侦听此事件,但发生的事情是当视图更改时,我的控制器范围被重新初始化,直到它准备就绪,事件已经被调度。 所以新的控制器范围从不监听事件。
请提供一些方法来处理这种情况。
答案 0 :(得分:0)
您可以做的是,不是在控制器中侦听事件,而是在服务中监听事件。因为,服务必然只有一个实例,所以在服务中你不会遇到这样的问题。
并且,对于控制器,您可以首先检查服务中是否存在标志,然后检索更新的值。
请考虑此示例代码取自here。
app.factory('userService', ['$rootScope', function ($rootScope) {
var service = {
model: {
name: '',
email: ''
},
SaveState: function () {
sessionStorage.userService = angular.toJson(service.model);
},
RestoreState: function () {
service.model = angular.fromJson(sessionStorage.userService);
}
}
$rootScope.$on("savestate", service.SaveState);
$rootScope.$on("restorestate", service.RestoreState);
return service;
}]);