在观察者未绑定之后绑定仍然有效

时间:2016-04-05 16:37:18

标签: angularjs

我在网上看到了这个code example。当作者超过4时,作者所做的是clickCount上的观察者解除绑定。

var unbindWatcher = $scope.$watch(
  "clickCount",
  function(newClickCount) {
    console.log("Watching click count.");
    if (newClickCount >= 5) {
      $scope.isShowingFeedback = true;
      unbindWatcher();
    }
  }
);

当观察者已经解除绑定时,在模型中更改clickCount仍会导致其在视图中发生变化。那么为什么从模型到视图的绑定仍然有效?谢谢!

1 个答案:

答案 0 :(得分:1)

你在这里有两个手表。

  1. $scope.clickCount,每次更改时都会在屏幕上显示{{ clickCount }}变量。在通过指令删除ng-if片段(例如{{ stuff }})之前,您永远不会控制此类观看。是的:$scope.$watch是一个只读绑定,每个绑定都是一个东西。
  2. 您使用<a ng-click="incrementCount()">Click it, click it real good!</a> 创建的指令。您正在控制该指令,并且正在按照您的指令删除它。这样:控制台消息创建6次:创建手表时为1,每个数字增量为5(初始变量值为0,所以... 0-1,1-2,2-3,3- 4,4-5是5次)。
  3. 但是你可以通过你使用的方式控制某些东西:

    incrementCount()
    每次点击都会

    incrementCount 始终执行。因此,您要更新第一块手表始终更新的变量,只要它在那里就无法控制

    我的建议:将!$scope.isShowingFeedback逻辑改为仅在ng-model="myvar"时增加。

    备注:您在这里没有任何双向绑定。双向绑定只能存在于指令中(例如ng-model是一个名为ngModel的指令,它与DOM中的属性User.order(["first_name desc", "last_name desc"]) 具有双向绑定;这将创建一个双向绑定观察器)和允许对父作用域属性进行读取和编辑。情况并非如此,因此请相应地修改您的问题:您有两个独立的观察者,其中一个对应于单向绑定。