如何在服务中观察阵列或对象的变化?

时间:2015-08-13 07:24:52

标签: javascript angularjs

我在我的角度应用程序中提供服务。此服务通过一些操作提供对数组的访问(访问提供给许多控制器,它们都需要观察此变量)。

但是如何观察此服务的变化?它没有$ scope,我也不知道,在哪里可以找到$ watch?

这是我的服务代码:

(function(){
    angular.module('something')
        .factory('MasterService',['$http', function($http){
            var service = this;
            var data = {                
                operations: [] // this array need to be accessible from controllers
            };

            $http.get('some/url').success(function(data){
                // here we mofidy array with loaded from server
                data.operations = angular.copy(data.operations);
            });

            return {
                // controllers will receive operations via this method
                getOperations: function () {
                    return data.operations;
                }
            };
        }])
})();

如何在此服务中观察操作变量?我需要添加类似的东西:

        operations.$watch(function(){
            //make some actions with operations
        });

2 个答案:

答案 0 :(得分:0)

控制器中,您可以$观看一个返回服务数据的函数:

$scope.$watch(function() {
  return MasterService.getOperations();
}, function(newVal, oldVal) {
  // do something with newVal;
});

答案 1 :(得分:0)

当你的数据在角度之外变化时,$ watchers非常有用,而且在角度应用程序中使用它是非常多余的,因为摘要周期已经有了观察者,你最好检查我们的逻辑。
使用这种方法,你甚至不需要$ watcher

(function(){
    angular.module('something')
        .factory('MasterService',['$http', function($http){
            var service = this;
            var data = {                
                operations: [] // this array need to be accessible from controllers
            };
            //ommitted
            return {
                // controllers will receive operations via this method
                operations: data.operations
            };
        }])
})();

并在控制器中

$scope.operators = MasterService.operators;