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

09-25 19:21