AngularJS : Comment regarder du service des variables?

J'ai un service à la, dire:

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

  return service;
}]);

Et je voudrais utiliser foo pour contrôler une liste est au format HTML:

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

Pour le contrôleur de détecter quand aService.foo est mis à jour, j'ai bricolé ce modèle où je ajouter de service de l'unité de commande $scope et ensuite utiliser $scope.$watch():

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

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

Ce sent de longue main, et j'ai été le répéter dans chaque contrôleur qui utilise le service de variables. Est-il un meilleur moyen d'obtenir regarder de variables partagées?

  • Vous pouvez passer d'un troisième paramètre $à regarder la valeur true à la profondeur de la montre service et toutes ses propriétés.
  • $champ d'application.foo= service.toto est suffisant, vous pouvez perdre la ligne ci-dessus. Et ce qu'il fait à l'intérieur de $watch n'a pas de sens, si vous voulez affecter une nouvelle valeur à $champ d'application.foo viens de le faire...
  • Pourriez-vous référence aService.foo dans le code html? (comme ceci: plnkr.co/modifier/aNrw5Wo4Q0IxR2loipl5?p=preview)
  • J'ai ajouté un exemple, sans les Rappels de dollars ou de montres, voir la réponse ci-dessous (jsfiddle.net/zymotik/853wvv7s)
  • C'est une question très intéressante. Et j'ai aussi découvert que je pouvais heureusement lier un contrôle à "service.foo" (et puis il faudrait être mis à jour sans aucune montres), mais si ma commande "$champ d'application.foo = service.foo;" et j'ai tenu à "toto", alors il n'auriez jamais mis à jour. Très étrange. La grande question de bien.
  • vous avez raison. Je pense que c'est en raison de la nature de Javascript, vous pouvez voir ce modèle à de nombreux autres endroits (et pas seulement dans Angulaire, mais en JS en règle générale). D'une part, de transférer la valeur de (et il n'est pas lié) et d'autre part, vous transfert d'un objet (ou de la valeur qui fait référence à l'objet...), et c'est pourquoi les propriétés sont correctement mis à jour (comme parfaitement illustré dans l'exemple de Zymotik ci-dessus).

InformationsquelleAutor berto | 2012-09-25