Обмен данными между директивами

У меня есть некоторые данные, называемые foo которые живут в области, которая является родительской для трех детей:

 
bar.scope = {foo: '=', baz: '@'}; mpq.scope = {foo: '=', bats: '@'}; ktr.scope = {foo: '=', otr: '@'};

Каков наилучший способ поделиться foo между этими тремя директивами? Варианты include:

  • Используйте изолированную область действия, чтобы пройти в foo три раза, тем самым дублируя ее по четырем областям
  • Пусть дочерние директивы наследуют родительскую область и находят baz , bats или otr на attrs
  • Поместите foo на $rootScope и $rootScope в дочерние директивы

Или есть другой подход, который лучше?

One Solution collect form web for “Обмен данными между директивами”

Вы можете создать фабрику, которую вы можете передать каждой директиве или controllerу. Это гарантирует, что у вас есть только один экземпляр массива в любой момент времени. EDIT: Единственное, что нужно сделать, это убедиться, что вы устанавливаете ссылочные типы, а не примитивные типы в своих областях директивы, или вы будете дублировать значения в каждой области.

Вот пример на Plnkr.co

 app.controller('MainCtrl', function($scope, dataService) { $scope.name = 'World'; //set up the items. angular.copy([ { name: 'test'} , { name: 'foo' } ], dataService.items); }); app.directive('dir1', function(dataService){ return { restrict: 'E', template: '

Directive 1

' + '
' + '' + '
', link: function(scope, elem, attr) { scope.data = dataService; } }; }); app.directive('dir2', function(dataService){ return { restrict: 'E', template: '

Directive 2

' + '
' + '' + '
', link: function(scope, elem, attr) { scope.data = dataService; } }; }); app.directive('dir3', function(dataService){ return { restrict: 'E', template: '

Directive 3

' + '
' + '' + '
', link: function(scope, elem, attr) { scope.data = dataService; } }; }); app.factory('dataService', [function(){ return { items: [] }; }]);

HTML

     
  • AngularJS - Как я могу ссылаться на имя свойства в ng-Repeat
  • как экспортировать html-данные в pdf в angularjs
  • Правильный способ интеграции плагинов jQuery в AngularJS
  • Вызовите метод controllerа с другого controllerа, используя 'scope' в AngularJS
  • Confused об Angularjs, заключаемых и изолирующих областях и привязках
  • как использовать параметр ng для установки значения по умолчанию для элемента select
  • Использование запятой в качестве разделителя списков с помощью AngularJS
  • Где поставить данные модели и поведение?
  • Автозаполнение Angularjs от $ http
  • Как передать некоторые данные от одного controllerа другому controllerу-сверстнику
  • AngularJS - как переопределить директиву ngClick
  • Давайте будем гением компьютера.