Angular $ watchGroup问题

时间:2015-05-27 10:05:09

标签: angularjs

我无法理解为什么oldValue中的$watchGroup未更新。

我只是代码:

$scope.sort='date'
$scope.results = [];

$scope.click = function(){
  $scope.sort = 'name'
  $scope.order = !$scope.order
}

$scope.$watchGroup(['sort','order'],function(newVal,oldVal){
  $scope.results.push(newVal[0]+' '+oldVal[0]+'; ' +newVal[1] + ' ' + oldVal[1])
  console.log(newVal[0],oldVal[0],newVal[1],oldVal[1]);
});

我在sort开始设置'date'然后点击按钮我将其更改为'name'。每次点击都会将值更改为'name',但$watchGroup表示旧值仍为'date'。旧的order值已更新,但旧的sort值不会更新。

有人可以解释这种奇怪的行为吗?

有一个plunkr:http://plnkr.co/edit/qpBp00tndmKqBarnfAgN?p=preview

1 个答案:

答案 0 :(得分:0)

这是有道理的,因为您使用的字符串文字name在每次分配时都是相同的,所以$scope.sort仅在您第一次单击按钮时才会更改。 (see here)。

如果您将代码更改为$scope.sort = new String('name'),您将看到预期的行为,因为这样您始终会创建一个新对象,并且每次单击时,您的变量将指向内存中的其他位置。