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