给定一个数组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);