Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 与ngIf指令结合使用时,一次性绑定重新计算变量是否正确安格拉斯_Javascript_Angularjs - Fatal编程技术网

Javascript 与ngIf指令结合使用时,一次性绑定重新计算变量是否正确安格拉斯

Javascript 与ngIf指令结合使用时,一次性绑定重新计算变量是否正确安格拉斯,javascript,angularjs,Javascript,Angularjs,我的一个同事向我展示了一个非常奇怪的行为,即在一个角落里一次性绑定 用例: <div ng-if="a" class="blue">{{ ::text }}</div> 当您有一个元素,该元素的文本由一个一次性绑定在块内,该块由ng if条件约束,那么如果我们更改该值,例如添加一些字母,然后更改ng if的条件,之后,一次性绑定的值被刷新 HTML: <div ng-if="a" class="blue">{{ ::text }}</div&g

我的一个同事向我展示了一个非常奇怪的行为,即在一个角落里一次性绑定

用例:

  <div ng-if="a" class="blue">{{ ::text }}</div>
当您有一个元素,该元素的文本由一个一次性绑定在块内,该块由ng if条件约束,那么如果我们更改该值,例如添加一些字母,然后更改ng if的条件,之后,一次性绑定的值被刷新

HTML:

  <div ng-if="a" class="blue">{{ ::text }}</div>
{{::text}
这是一种bug,还是预期的行为


下面是我正在做的一个示例:

如果
ng If
的条件为false,然后为true,它将重新创建其内容,导致再次计算一次性
ng bind
指令

一次绑定所做的唯一一件事是避免在表达式上添加监视,但它不会“缓存”或“存储”再次编译指令内容时的结果


因此,这是预期的行为。

按预期工作,因为使用
ngIf
指令,代码被完全重新编译。如果您使用
ngShow
,行为会发生变化,代码的行为与您对ngIf的期望一致。这是因为代码是,所以不会导致变量的重新(第一次)求值。

是的,我知道,但是有一种错误,或者说是预期的行为?这是预期的行为。假设您的内容在使用列表的ng repeat中。每当列表发生更改并且创建或重新创建行时,即使表达式是一次性绑定,也会再次计算它们。如果使用的是
ng show
,而不是
ng if
,则值不会更改,因为这一次内容将只是更改可见性而不是重新创建。如果您不喜欢这种行为,只需在运行angular应用程序时使用ng If一次性绑定
ng If=“::a”
查看您的HTML即可。ng show only define display:none on element,而ng在每次更改条件时都编译html。当@jjmotes回答时,您正在重新评估表达式的值