给定一个数组sourceArray
,我想创建一个依赖于第一个条目的targetArray
。这意味着创建的数组应包含每个源条目的条目,并在sourceArray
更改时进行更新。但是,修改targetArray
绝不应该更新源代码。
只要sourceArray
是静态的,这种Plunker都可以工作。一旦您开始修改源条目,由于我缺乏适当的数据绑定(bind)机制,它显然将无法正确更新目标。
我是否需要通过观察targetArray
手动更新sourceArray
或Angular是否实现了任何一种单向数据绑定(bind)机制,可以用来使两个数组保持同步?
最佳答案
正如Pritam所说。您应该使用$ watch。但是必须将Collection绑定(bind)到它,以使其起作用。并在 watch 内部合并数组。
查找此工作示例:
$scope.$watchCollection(angular.bind(this, function () {
return this.sourceArray;}), function (newVal, oldVal) {
var arr = [];
for(var i in vm.sourceArray){
var shared = false;
for (var j in vm.targetArray)
if (vm.targetArray[j].id == vm.sourceArray[i].id) {
shared = true;
break;
}
if(!shared) arr.push(vm.sourceArray[i])
}
console.log(arr);
vm.targetArray = vm.targetArray.concat(arr);
},true);
http://plnkr.co/edit/E2inRLtwfWnb1VBymNNl?p=preview