我在网上看到了这个code example。当作者超过4时,作者所做的是clickCount
上的观察者解除绑定。
var unbindWatcher = $scope.$watch(
"clickCount",
function(newClickCount) {
console.log("Watching click count.");
if (newClickCount >= 5) {
$scope.isShowingFeedback = true;
unbindWatcher();
}
}
);
当观察者已经解除绑定时,在模型中更改clickCount
仍会导致其在视图中发生变化。那么为什么从模型到视图的绑定仍然有效?谢谢!
答案 0 :(得分:1)
你在这里有两个手表。
$scope.clickCount
,每次更改时都会在屏幕上显示{{ clickCount }}
变量。在通过指令删除ng-if
片段(例如{{ stuff }}
)之前,您永远不会控制此类观看。是的:$scope.$watch
是一个只读绑定,每个绑定都是一个东西。<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次)。但是你可以通过你使用的方式控制某些东西:
incrementCount()
每次点击都会 incrementCount
始终执行。因此,您要更新第一块手表始终更新的变量,只要它在那里就无法控制。
我的建议:将!$scope.isShowingFeedback
逻辑改为仅在ng-model="myvar"
时增加。
备注:您在这里没有任何双向绑定。双向绑定只能存在于指令中(例如ng-model
是一个名为ngModel的指令,它与DOM中的属性User.order(["first_name desc", "last_name desc"])
具有双向绑定;这将创建一个双向绑定观察器)和允许对父作用域属性进行读取和编辑。情况并非如此,因此请相应地修改您的问题:您有两个独立的观察者,其中一个对应于单向绑定。