2013-09-05 2 views
8

У меня есть два примера директивы. Есть ли способ связи между двумя экземплярами? Или я могу установить глобальную переменную, чтобы все экземпляры имели одинаковое значение.Лучший способ связи между экземплярами директивы

Я попытался сохранить значение в сервисе. Когда значение в одном экземпляре изменяется, другие экземпляры будут обновляться вручную. Но я не уверен, что это лучший способ или нет.

Спасибо.

+0

Как насчет '$ broadcast'? http://docs.angularjs.org/api/ng.$rootScope.Scope#$broadcast –

ответ

11

Директива завода сама по себе является одноэлементным. Все, что вы объявляете вне объекта определения, будет глобальным для всех экземпляров. Поскольку каждый экземпляр имеет свою собственную область, данные экземпляра должны входить в область действия. Так, что-то вроде этого:

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/

Смежные вопросы