SORU
25 EYLÜL 2012, Salı


Hizmet değişkenleri izlemek için Nasıl?AngularJS :

Bir hizmet var, dediler

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

  return service;
}]);

Ve foo HTML içerisinde işlenen bir listesini kontrol etmek için kullanmak istiyorum:

<div ng-controller="FooCtrl">
  <div ng-repeat="item in foo">{{ item }}</div>
</div>

aService.foo güncelleme algılamak için denetleyicisi için denetleyici aService $scope ben eklemek nerede birlikte bu desen Arnavut kaldırımlı sonra $scope.$watch() kullanın:

function FooCtrl($scope, aService) {                                                                                                                              
  $scope.aService = aService;
  $scope.foo = aService.foo;

  $scope.$watch('aService.foo', function (newVal, oldVal, scope) {
    if(newVal) { 
      scope.foo = newVal;
    }
  });
}

Bu uzun elli hissediyor ve hizmetin değişkenleri kullanan her denetleyicisi tekrar edip durdum. Daha iyi bir şekilde paylaşılan değişkenleri izlemek gerçekleştirmek için var mı?

CEVAP
9 Temmuz 2013, Salı


Her zaman $watch zulüm ve yükünü önlemek istiyorsanız iyi eski gözlemci desen kullanabilirsiniz.

Servis:

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();
  });
});

Kumanda:

function FooCtrl($scope, aService){
  var updateFoo = function(){
    $scope.foo = aService.foo;
  };

  aService.registerObserverCallback(updateFoo);
  //service now in control of updating foo
};

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • gadgetgal38

    gadgetgal38

    9 HAZİRAN 2009
  • hans peder sahl

    hans peder s

    22 Temmuz 2009
  • Lupe Fiasco

    Lupe Fiasco

    23 ŞUBAT 2006