Angularjs服务回调以更新控制器的范围

shr*_*hrw 21 angularjs angularjs-scope

具有第三方库回调函数的服务:

mbAppModule.service('aService', function ($http) {
    this.data={"somedata":0};
    var m3rdPartLib="init";  // init    
    m3rdPartLib.on('timeupdate', function() {
        this.data.somedata=1;
    });
}
Run Code Online (Sandbox Code Playgroud)

还有一个控制器

mbAppModule.controller({
    MController: function ($scope, $http, mService) {
        $scope.mService= mService;    
    });
});
Run Code Online (Sandbox Code Playgroud)

HTML页面

{{mService.data.somedata}}
Run Code Online (Sandbox Code Playgroud)

问题:

m3rdPartLib.on()是第三方库回调函数,我在服务中使用它.我希望在ui中显示它,因为它正在更新.在回调时,值会发生变化,但不会反映在ui上.

阅读一些文档,发现$ rootScope.$ apply可以被调用,但我没有在服务中引用$ scope/$ rootScope.

Mar*_*man 26

您可以依赖$rootScope并在您的服务中调用apply.

mbAppModule.service('aService', ["$http", "$rootScope", function ($http, $rootScope) {
    this.data = {
        "somedata": 0
    };
    var m3rdPartLib = "init"; // init    
    m3rdPartLib.on('timeupdate', function () {
        $rootScope.$apply(function(){
            this.data.somedata = 1;
        });
    });
}]);
Run Code Online (Sandbox Code Playgroud)

  • [jsfiddle](https://jsfiddle.net/gq6kucdg/5/)我觉得如果服务不需要了解用户界面会更好.对我来说,似乎应该落在控制器上.通过在服务中创建回调来更新UI,可以轻松完成此操作. (7认同)