如何让$ watch只触发一次?

时间:2016-02-01 09:16:41

标签: javascript angularjs

我添加了$watch;如果panodatas为$watch,则undefined内的代码会引发错误:

scope.$watch('panodatas', function(newVal) {
   if ('isCreate' in attrs) {
      $('.modal #points').hide()
      $('.modal #points-info').hide()
   }

   if (newVal || 'isCreate' in attrs) {
      scope.x = 0
      scope.y = 0
      scope.points = []

问题是,每次panodatas更改时代码都会触发。

我该怎么做才能$watch只触发一次,而不是panodatas将来发生变化?

3 个答案:

答案 0 :(得分:1)

试试这个:

var unwatch = $scope.$watch('someVar', function() {
   unwatch();
});

答案 1 :(得分:1)

scope.$watch返回取消注册函数,所以如果你这样做:

var dereg = scope.$watch('panodatas', function(newVal) {
    dereg();
});

它会在运行后立即取消注册。

答案 2 :(得分:0)

您可以清除功能内的$watch -

var listener = $scope.$watch("panodates", function () {
    // ...
    listener(); // Would clear the watch
});

它将被调用一次,然后观察者将被清除。