Angularjs 何时支持ng if与ng show/ng hide?
我知道Angularjs 何时支持ng if与ng show/ng hide?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我知道ng show和ng hide影响元素上设置的类,并且ng if控制元素是否作为DOM的一部分呈现 对于选择ng if而不是ng show/ng hide或反之,是否有指导原则?取决于您的用例,但要总结区别: ng if将从DOM中删除元素。这意味着您的所有处理程序或附加到这些元素的任何其他内容都将丢失。例如,如果将单击处理程序绑定到一个子元素,当ng if的计算结果为false时,该元素将从DOM中删除,并且您的单击处理程序将不再工作,即使ng if之后的计算结果为true并显示该元素也
ng show
和ng hide
影响元素上设置的类,并且ng if
控制元素是否作为DOM的一部分呈现
对于选择
ng if
而不是ng show
/ng hide
或反之,是否有指导原则?取决于您的用例,但要总结区别:
ng if
将从DOM中删除元素。这意味着您的所有处理程序或附加到这些元素的任何其他内容都将丢失。例如,如果将单击处理程序绑定到一个子元素,当ng if
的计算结果为false时,该元素将从DOM中删除,并且您的单击处理程序将不再工作,即使ng if
之后的计算结果为true并显示该元素也是如此。您需要重新连接处理程序ng show/ng hide
不会从DOM中删除元素。它使用CSS样式隐藏/显示元素(注意:您可能需要添加自己的类)。这样,附加到子级的处理程序就不会丢失ng if
创建子作用域,而ng show/ng hide
不创建子作用域ng show/ng hide
相比,使用ng if
时,不在DOM中的元素对性能的影响更小,并且您的web应用程序可能看起来更快。根据我的经验,差别是微不足道的。当同时使用ng show/ng hide
和ng if
时,可以制作动画,在角度文档中提供了这两种动画的示例
最后,您需要回答的问题是,您是否可以从DOM中删除元素?有关演示ng if/ng show工作方式差异的代码笔,请参见
@马尔科沃克萨诺维奇很好地回答了这个问题。但我从另一个角度来看:我总是使用ngif
并将这些元素从DOM中取出,除非:
$watch
-es在不可见时保持活动状态。如果您希望能够检查当前不可见的输入的有效性,以确定整个表单是否有效,那么表单可能就是一个很好的例子$digest
周期中被求值了数百次或数千次,甚至没有人看到它。然后你意识到你有几十个或几百个看不见的元素都在做同样的事情
桌面可能确实足够强大,足以让大多数JS执行速度问题变得毫无意义。但是,如果你是为移动设备开发的,那么在任何可能的情况下使用ng if应该是不需要动脑筋的。JS速度在移动处理器上仍然很重要。使用ng if是以非常低的成本获得潜在重要优化的非常简单的方法。ng if on ng include和on ng controller将产生重大影响 在ng include上,它不会加载所需的部分,除非标志为true,否则不会处理 在ng控制器上,除非标志为true,否则不会加载控制器 但问题是,当标志在ng中变为false时,如果它将从DOM中删除,当标志变为true时,它将重新加载DOM。在这种情况下,ng show更好,有一次show ng if更好一个重要注意事项: ngIf(与ngShow不同)通常创建可能产生意外结果的子作用域 我有一个与此相关的问题,我花了很多时间来弄清楚到底发生了什么 (我的指令将其模型值写入错误的范围。) 所以,如果你跑得太慢,就用ngShow来保存你的头发吧 无论怎样,性能差异都很难被注意到,我还不确定没有测试谁会喜欢它…根据我的经验: 1) 如果您的页面具有使用ng If/ng show显示/隐藏内容的切换,则ng If会导致更多浏览器延迟(较慢)。例如:如果您有一个按钮用于在两个视图之间切换,那么ng show似乎会更快
2) ng if在计算结果为true/false时将创建/销毁作用域。如果将控制器连接到ng If,则每次ng If的计算结果为true时,都会执行该控制器代码。如果您使用的是ng show,那么控制器代码只执行一次。因此,如果您有一个在多个视图之间切换的按钮,那么使用ng if和ng show将在编写控制器代码的方式上产生巨大的差异。如果您使用
ng show或ng hide
内容(例如服务器上的缩略图)将被加载,与表达式的值无关,但将基于表达式的值显示
如果使用ng If
,则仅当ng If的表达式计算结果为truthy时,才会加载内容
如果要从服务器加载数据或图像并仅根据用户交互显示这些数据或图像,则使用ng if是一个好主意。这样,您的页面加载将不会被不必要的nw密集型任务阻止。答案不是sim卡