Javascript 设置特定值时,角度一次性有条件绑定或取消绑定侦听器
我在DOM中有如下内容:Javascript 设置特定值时,角度一次性有条件绑定或取消绑定侦听器,javascript,angularjs,one-time-binding,Javascript,Angularjs,One Time Binding,我在DOM中有如下内容: <div ng-if="variant" ng-include="'size-picker.html'"> </div> 我想在variant为真时显示div。所以 $scope.variant将以false开头。一段时间后,它可能/可能不会变为真。当$scope.variant变成true时,它永远不会改变它的值。所以我想要的是一次绑定ng,如果$scope.variant是true 类似于: <div ng-if="::v
<div ng-if="variant"
ng-include="'size-picker.html'">
</div>
我想在variant
为真时显示div。所以
$scope.variant
将以false
开头。一段时间后,它可能/可能不会变为真
。当$scope.variant
变成true
时,它永远不会改变它的值。所以我想要的是一次绑定ng,如果$scope.variant
是true
类似于:
<div ng-if="::variant"
ng-include="'size-picker.html'">
</div>
将在错误时停止绑定
我可以通过第一次停止将false
赋值给variant
来实现,但在我的情况下这是不可能的
如果variant
为true
,如何解除ng的绑定?文档中说:
一次性表达式稳定后将停止重新计算,
如果表达式结果为
非未定义的值
因此,您可以从未定义的值开始。您可以使用$watch
,注销绑定
或范围
$watch
返回一个注销
函数
您可以使用$watch
调用返回的函数注销$watch
:
var unwatch = $scope.$watch('variant', function(newValue, oldValue) {
if(newValue == true)
{
unwatch();
}
});
因此,一旦您的变体变为真,其上的监视将被删除,绑定将停止。
var-app=angular.module(“演示”,[]);
应用程序控制器(
“AppController”,
职能($范围){
$scope.count=0;
$scope.after_unwatch=false;
var unbindWatcher=$scope.$watch(
“伯爵”,
功能(计数){
警报(“监视点击计数”);
如果(计数>=5){
$scope.after_unwatch=true;
解绑观察者();
}
}
);
$scope.incrementCount=函数(){
$scope.count++;
};
}
);代码>
在AngularJS中解除绑定$watch()侦听器
点击它五次,然后“count”上的手表被移除。
&拉阔;
点击时的手表被移除。
在我的例子中,它将以false开头。这是一个巨大的代码库。我这样做是有限制的。如果Sravan的答案不适用于您的具体情况,您可以为ngIf使用不同的未定义变量,然后监控变量的状态,适当地更新该变量。不是最优的,但有时有困难的约束,这是我们能管理的最好的,这是一个很好的方法。谢谢。你是说angular会完全停止监视这个变量?甚至它也依赖于其他地方,比如DOM?是的,一旦你把这个范围变量放到$watch
函数中,它的范围就会根据一个条件被删除。让我给你一个例子,发布它。否。我现在换了任务。我觉得这对我来说没问题。谢谢@Sravan
var unwatch = $scope.$watch('variant', function(newValue, oldValue) {
if(newValue == true)
{
unwatch();
}
});