Angularjs监视数组并获取更改的对象

时间:2017-01-12 22:19:40

标签: angularjs

在以角度插入或删除数组的上下文中,是否可以观察数组然后获取从数组中添加或删除的对象?我不关心数组中的对象属性,只关注对象本身的添加或删除。所以我相信$ watchCollection在这里很合适,所以它不是一块很深的手表。

例如,我将此数组作为双列表框的模型:

$scope.employees = [
    {
      name: "Bob",
      id: "0"
    },
    {
      name: "Carl",
      id: "1"
    },
    {
      name: "Bill",
      id: "2"
    }
  ];

当我移动一个或者移动它时,列表框将自动更新$ scope.employees(插入/删除)。如果我这样做:

$scope.$watchCollection('employees', function(){
    //somehow get changed object
    var changedObject = ...;
    $scope.changedItems.push(changedObject);
  });

我希望能够获取添加/删除的项目,以便我可以使用它或将其保存在某处。

1 个答案:

答案 0 :(得分:-1)

$watchCollection处理函数接收新值和旧值:

$scope.$watchCollection('employees', function(newValue, oldValue){
    console.log(newValue);
    console.log(oldValue);

    var addedArray = newValue.filter(x => !oldValue.find(x));
    var removedArray = oldValue.filter(x => !newValue.find(x));

    var changedObject = {added: addedArray, removed: removedArray};
    $scope.changedItems.push(changedObject);
  });

有关详细信息,请参阅AngularJS $watchCollection API Reference