angularjs – 在指令之间共享数据

我有一些名为foo的数据,它存在于三个孩子的父母的范围内:
<div ng-init="foo=[1,2,3]">
    <bar foo="{{foo}}" baz="{{odp}}" />
    <mpq foo="{{foo}}" bats="{{maktz}}" />
    <ktr foo="{{foo}}" otr="{{ompg}}" />
</div>

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

在这三个指令之间分享foo的最佳方式是什么?选项包括

>使用隔离镜头将foo传入三次,从而将其复制到四个镜像上
>让子代码继承父范围,并在attrs上找到baz,bats或otr
>将foo放在$ rootScope上,并注入到子指令中

还是有更好的方法呢?

您可以创建一个可以传递给每个指令或控制器的工厂。这将确保您在任何给定的时间只有一个数组实例。编辑:这里唯一的办法是确保您在指令范围上设置引用类型而不是原始类型,否则最终将复制每个范围中的值。

Here is an example on 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: '<h3>Directive 1</h3>' + 
    '<div ng-repeat="item in data.items">' + 
      '<input type="text" ng-model="item.name"/>' + 
    '</div>',link: function(scope,elem,attr) {
      scope.data = dataService;
    }
  };
});

app.directive('dir2',template: '<h3>Directive 2</h3>' + 
    '<div ng-repeat="item in data.items">' + 
      '<input type="text" ng-model="item.name"/>' + 
    '</div>',attr) {
      scope.data = dataService;
    }
  };
});

app.directive('dir3',template: '<h3>Directive 3</h3>' + 
    '<div ng-repeat="item in data.items">' + 
      '<input type="text" ng-model="item.name"/>' + 
    '</div>',attr) {
      scope.data = dataService;
    }
  };
});

app.factory('dataService',[function(){
  return { items: [] };
}]);

HTML

<dir1></dir1>
  <dir2></dir2>
  <dir3></dir3>

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...