Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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 即使在移除元素之前条件为false,AngularJS ng if指令也会短暂呈现_Javascript_Angularjs_Angularjs Directive_Angular Ng If - Fatal编程技术网

Javascript 即使在移除元素之前条件为false,AngularJS ng if指令也会短暂呈现

Javascript 即使在移除元素之前条件为false,AngularJS ng if指令也会短暂呈现,javascript,angularjs,angularjs-directive,angular-ng-if,Javascript,Angularjs,Angularjs Directive,Angular Ng If,在下面的模板中,我希望脚本标记永远不会呈现,而警报脚本永远不会执行。不管怎样 <div ng-if="false"> <script>alert('should not run')</script> Should not appear </div> 警报('不应运行') 不应该出现 这在移动设备上给我们带来了巨大的性能问题,因为我们将大型DOM和指令结构包装在ng ifs中,期望它们在条件为false时不会呈现 我还测试了ng

在下面的模板中,我希望脚本标记永远不会呈现,而警报脚本永远不会执行。不管怎样

<div ng-if="false">
    <script>alert('should not run')</script>
    Should not appear
</div>

警报('不应运行')
不应该出现
这在移动设备上给我们带来了巨大的性能问题,因为我们将大型DOM和指令结构包装在
ng if
s中,期望它们在条件为false时不会呈现

我还测试了ng开关,其行为方式与此相同

这是预期的行为吗?有没有办法避免不必要的渲染


它可能看起来很落后,但是
ngIf
更多地处理DOM的删除,而不是添加。在控制器完成实例化之前,DOM仍然存在。这通常是一件好事,并允许您在没有JS(或者初始加载状态)的情况下对用户进行优雅的降级

如果不希望呈现内部DOM,请将其放置在指令(它自己的指令或通过
ng include
)或视图中

示例1(理解脚本运行的原因):

为了更好地理解流程,您可以将示例更新为:

<div ng-if="false">
    {{"Should not appear"}}
    <script>alert('should not run')</script>
</div>    

{{“不应出现”}
警报('不应运行')

您会注意到,当警报弹出时,Angular尚未插入“不应出现”(它出现在大括号中)。但是,在解除警报后,警报将消失

示例2(如何防止警报):

指令
中隐藏“不应运行”的代码的示例可在此处查看:


在本例中,仅当您将
ng if=“false”
替换为
ng if=“true”
时,您才会收到警报。

我认为false表达式不能很好地转换为angular false。 我可以通过以下设置来证明这一点:

<div ng-if="!true">

它不会呈现当前div中的文本。 无论如何,它执行警报,我想它是在角度运行之前执行的,这就是为什么

你读过这个吗?尝试仍然无效:。你不明白这个问题。无论您在这个
ngIf
中放置什么,基本DOM都将被注入。它将包括脚本。注射是件好事!它是经过设计的,允许您在Angular未加载或出现其他问题时显示后备元素。