Javascript 设置特定值时,角度一次性有条件绑定或取消绑定侦听器

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

我在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="::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();
    }
});