2015-11-02 29 views
1

我对这个问题并不确定,但是有时候我为某个功能激活$ watch时看起来不起作用。 比如我有这个简单的服务

angular.module('sp-app').factory('mediaSources', function() { 
    var storages = []; 
    return { 
     addStorage: function(storage) { 
      storages.push(storage); 

     }, 
     getStorages: function() { 
      return storages; 
     } 

    } 

}); 

,当我看getStorage方法,以更新我认为它不叫更改回调或仅在初始化阶段要求

$scope.$watch(function($scope) {    
     return mediaSources.getStorages(); 
    }, function() {  
     console.log('call') 
    }); 

可以和我只通过观察返回阵列的长度属性来跟踪更改

return mediaSources.getStorages().length; 我想知道是否因为我在我的应用程序中写过类似的东西,并且它工作正常。

回答

1

如果我理解你正在尝试做的,你不应该需要设置观测上这样的事情,你可以只使用一个工厂,像这样:

angular.module('app').factory('mediaSources', function(){ 
    var storages = {}; 

    storages.list = []; 

    storages.add = function(message){ 
     storages.list.push(message); 
    }; 

    return storages; 
}); 

然后在控制器要接收/更新数据,例如,你会做

$scope.myControllerVar = mediaSources.list; 

没有必要注意它,它应该为你更新。

0

你将不得不建立观察者与equality flag作为第三个参数:

$scope.$watch(function($scope) { 
    return mediaSources.getStorages(); 
}, function() { 
    console.log('call'); 
}, true); 
+0

和你将如何解释,它有时为其他组件协同工作? –