AngularJS : How to watch service variables?

后端 未结 21 1639
盖世英雄少女心
盖世英雄少女心 2020-11-22 09:12

I have a service, say:

factory(\'aService\', [\'$rootScope\', \'$resource\', function ($rootScope, $resource) {
  var service = {
    foo: []
  };

  return          


        
21条回答
  •  一整个雨季
    2020-11-22 09:31

    You can always use the good old observer pattern if you want to avoid the tyranny and overhead of $watch.

    In the service:

    factory('aService', function() {
      var observerCallbacks = [];
    
      //register an observer
      this.registerObserverCallback = function(callback){
        observerCallbacks.push(callback);
      };
    
      //call this when you know 'foo' has been changed
      var notifyObservers = function(){
        angular.forEach(observerCallbacks, function(callback){
          callback();
        });
      };
    
      //example of when you may want to notify observers
      this.foo = someNgResource.query().$then(function(){
        notifyObservers();
      });
    });
    

    And in the controller:

    function FooCtrl($scope, aService){
      var updateFoo = function(){
        $scope.foo = aService.foo;
      };
    
      aService.registerObserverCallback(updateFoo);
      //service now in control of updating foo
    };
    

提交回复
热议问题