$ watch回调执行顺序

时间:2015-06-02 10:39:41

标签: angularjs callback

这就是我所拥有的:

$scope.$watch('someVar', function (val) {
    $scope.someList.push(val);
    execLongFunction.then(function (data) {
        val.computedValue = data;
    })
})

我想要的是:在我的作用域中为数组添加一个值,然后执行一些计算然后(可能)更新作用域。重点是我希望在val完成之前将execLongFunction推送到范围数组。

问题是:所有$ watch回调代码都会立即执行:即使我添加了一些console.log(),我也会同时看到所有这些。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

$scope.$watch('someVar', function (newVal,oldVal) {
    if(newVal != oldVal){
      $scope.someList.push(newVal);
      execLongFunction.then(function (data) {
        val.computedValue = data;
      })
    }
});

$ watch返回您正在观看的$ scope变量的oldValue和newValue。尝试使用它们并相应地执行您的功能。如果每次从指令更新时'someVar'的值不会改变,那么这应该有效。