给定一个数组sourceArray我想创建一个取决于第一个的条目的targetArray.这意味着创建的Array应包含每个源条目的条目,并且只要sourceArray发生更改,就会更新.但是,修改targetArray不应该更新源.
这个Plunker的作品只要sourceArray是静态的.一旦你开始修改源代码,它显然不会正确更新目标,因为我缺乏一个适当的数据绑定机制.
是否需要通过观察sourceArray手动更新targetArray,或者是否有任何一种由Angular实现的单向数据绑定机制,我可以使用它来保持两个数组同步?
解决方法
正如普林斯说.你应该使用$watch.但是必须将Collection绑定到它,以使其工作.并且在表内部合并数组.
查找此工作示例:
$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