当我写相同的值时,观察不会触发

时间:2014-06-12 12:27:31

标签: angularjs angularjs-scope

我有一块手表

 $scope.$watchCollection('[deal.curr1, deal.curr2]', function (newValues) {
      ...
        }

然后我改变代码中的值:

$scope.deal.curr1 ="USD";

但在一个案例中,curr1已经是" USD" 手表不会被称为。 但是无论如何我想要它。 在没有帮助之前设置null。

$scope.deal.curr1 =null;
 $scope.deal.curr1 ="USD";

2 个答案:

答案 0 :(得分:0)

设置为null然后其他值无法正常工作,因为在每个周期之后都会进行逐步验证,如果你没有这样做,则必须将其设置为null然后使用$ timeout。

  $scope.var=null
  $timeout(function(){
       $scope.val="value";
  })

要在下一个周期分配新值,但这将运行两次验证。

现在的问题是。如果值保持不变,为什么要运行watch函数?这是一种保护措施,可以避免不必要的呼叫并提高性能如果价值没有变化,那么观察者不应该做出反应的正当理由。

如果你仍然必须建议在可能的情况下观察其他参数,这会给出某些动作发生的迹象。

你能在用例中详细说明吗?

答案 1 :(得分:0)

只有在最后两次调用中watchExpression不同时才会触发侦听器。由于您只想触发侦听器,因此您只需手动调用它即可。 Scope

编辑:因为在$ http调用之后总是调用侦听器,只需在$ http promise的成功处理程序中调用侦听器并抛弃$ watchCollection

$http(...).then(function(payload){
   //things you do with the resonse. like setting $scope.deal.curr1 
   $scope.listener(newVal);
}, function(reason){...})