我无法理解为什么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
答案 0 :(得分:0)
这是有道理的,因为您使用的字符串文字name
在每次分配时都是相同的,所以$scope.sort
仅在您第一次单击按钮时才会更改。 (see here)。
如果您将代码更改为$scope.sort = new String('name')
,您将看到预期的行为,因为这样您始终会创建一个新对象,并且每次单击时,您的变量将指向内存中的其他位置。