如何比较$ watch旧值和新值

时间:2017-03-17 08:09:22

标签: angularjs arrays

我正在使用$watch来监听myData这是一个数组。在按钮单击中,我将一个新元素插入到数组中。我需要从newValue数组中找到新添加元素的位置,这是$watch中的参数。

$scope.myData = [{
            "name": "karthik ",
            "age": 24
        },
        {
            "name": "Vijay ",
            "age": 24,
        },
        {
            "name": "Krish",
            "age": 26,
        }];


var newData = {
    "name": "viki",
    "age": 25
}
myData.splice(2, 0, newData);

链接功能我有

scope.$watchCollection(function(scope) {
    return scope.myData;
}, function(newVal, oldVal) {
    console.log(newVal);
    console.log(oldVal);
});

2 个答案:

答案 0 :(得分:0)

您可以使用request.getParameter("cfgname")来比较两个angular.equalvaluesobjects

https://docs.angularjs.org/api/ng/function/angular.equals

并根据您的声明,您希望数组中的新插入元素。然后在数组中插入元素后如果你没有对数组进行任何操作,那么插入的元素就是你可以简单检索的最后一个元素。

答案 1 :(得分:0)

根据您的要求, 我需要从newValue数组中找到新添加元素的位置。

我创建了一个function来获取更改的数组值以及添加它的索引。

这是功能

function difference(a1, a2) { 
  var result = { array: [], index: 0};
  for (var i = 0; i < a1.length; i++) {
    if (a2.indexOf(a1[i]) === -1) {
      result.array.push(a1[i]);
      result.index = i 
    }
  }
  return result;
}

您可以使用difference(newVal,oldVal)

进行调用
scope.$watchCollection(function(scope) {
    return scope.myData;
}, function(newVal, oldVal) {
    console.log(newVal);
    console.log(oldVal);
    var diff = difference(newVal,oldVal)
    console.log(diff)
});

例如:

var diff = difference([1,2,3,[2,4],4],[1,2,3,4])

O/P: {array: [2,4], index: 3}