gpt4 book ai didi

angularjs - 在指令之间共享数据

转载 作者:行者123 更新时间:2023-12-02 22:37:10 24 4
gpt4 key购买 nike

我有一些名为 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 上查找 bazbatsotr
  • foo 放在 $rootScope 上并将其注入(inject)子指令

或者还有其他更好的方法吗?

最佳答案

您可以创建一个可传递给每个指令或 Controller 的工厂。这将确保您在任何给定时间只有一个数组实例。编辑:这里唯一的问题是确保您在指令作用域上设置引用类型而不是基本类型,否则您最终将在每个作用域中重复值。

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', function(dataService){
return {
restrict: 'E',
template: '<h3>Directive 2</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('dir3', function(dataService){
return {
restrict: 'E',
template: '<h3>Directive 3</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.factory('dataService', [function(){
return { items: [] };
}]);

HTML

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

关于angularjs - 在指令之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13482351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com