2013-09-05 14 views
8

Mam dwa wystąpienia dyrektywy. Czy istnieje sposób komunikacji pomiędzy tymi dwoma instancjami? Czy mogę ustawić globalną zmienną, że wszystkie wystąpienia będą miały tę samą wartość.Najlepszy sposób komunikacji między instancjami dyrektywy

Próbowałem zapisać wartość w usłudze. Po zmianie wartości w jednym wystąpieniu inne instancje zostaną zaktualizowane ręcznie. Ale nie jestem pewien, czy jest to najlepszy sposób, czy nie.

Dzięki.

+0

Jak o '$ broadcast'? http://docs.angularjs.org/api/ng.$rootScope.Scope#$broadcast –

Odpowiedz

11

Sama dyrektywa dyrektywy jest singleton. Wszystko, co zadeklarujesz poza obiektem definicji, będzie globalne dla wszystkich instancji. Ponieważ każda instancja ma własny zakres, dane specyficzne dla instancji powinny wchodzić w zakres. Tak, coś takiego:

angular.module("myApp", []) 

.directive("myDir", function() { 
    var myGlobal = 0; 

    return { 
     template: '<div>Global: {{getGlobal()}}, Local: {{local}} -- <a href="" ng-click="increment()">Increment</a></div>', 
     scope: {}, 
     link: function(scope, element, attrs) { 
      scope.local = 0; 
      scope.increment = function() { 
       scope.local++; 
       myGlobal++; 
      } 
      scope.getGlobal = function() { 
       return myGlobal; 
      } 
     } 
    } 
}); 

http://jsfiddle.net/7YwDS/

Powiązane problemy