无法侦听Controller $范围内的事件

时间:2014-12-31 08:25:40

标签: angularjs angularjs-scope angularjs-controller

我正面临着竞争状况。其中一项服务是使用ui-router更改视图,然后从$ rootscope广播事件。控制器的范围(与更改的视图相关联)正在侦听此事件,但发生的事情是当视图更改时,我的控制器范围被重新初始化,直到它准备就绪,事件已经被调度。 所以新的控制器范围从不监听事件。

请提供一些方法来处理这种情况。

1 个答案:

答案 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;
}]);
相关问题