如何使$watch只触发一次

How to make $watch only trigger once?

本文关键字:一次 何使 watch      更新时间:2023-09-26

我添加了$watch;如果undefined panodatas,$watch中的代码会抛出错误:

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发生变化时触发?

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

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

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

试试这个:

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

您可以清除函数内部的$watch -

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

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