替代ng-show / -hide或如何只加载DOM的相关部分
当使用ng-show / -hide时,包含在这些块中的内容最初显示在用户屏幕上。 只有在几毫秒之后(在angular.js加载并执行之后),右边的块才会以ng-show显示。
有没有比ng-show / -hide更好的方法只加载数据的相关部分到DOM?
ng-view的问题是我只能在页面上有一个,所以我必须根据当前状态来切换DOM的很多部分的行为。
要避免“未编译内容的闪光”,请使用ng-bind而不是{{}}
或使用ng-cloak :
<span ng-cloak ng-show="show">Hello, {{name}}!</span>
如果你使用ng-cloak,并且不在你的HTML头部加载Angular.js,你需要把它添加到你的CSS文件中,并确保它加载到页面顶部:
[ng\:cloak], [ng-cloak], .ng-cloak { display: none; }
请注意,您只需在初始页面上使用这些指令。 稍后(例如,通过ng-include,ng-view等)拉取的内容将在浏览器呈现之前由Angular编译。
有没有更好的方法来加载除ng-show / hide之外的其他数据,其中只有相关的部分被加载到DOM中。
ng-show / ng-hide的一些替代方法是ng-include , ng-switch和(从v1.1.5开始) ng-if :
<div ng-include src="someModelPropertySetToThePartialYouWantToLoadRightNow"></div>
另请参阅https://stackoverflow.com/a/12584774/215945,了解与ng-include一起使用的ng-switch示例。;
请注意,ng-switch和ng-if添加/删除DOM元素,而ng-show / hide只会改变CSS(如果这对您很重要)。
我使用了ng-cloak技巧,而且看起来并没有那么好。 在Angular文档之后,我将下面的代码添加到了我的CSS中:
[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { display: none !important; }
请参阅: http : //docs.angularjs.org/api/ng.directive : ngCloak
Per Mark Rajcok的回答很好,下面是一个CodePen,展示了ng-show,ng-switch和ng(如果在操作中),所以您可以比较这些方法,并查看条件内容实际呈现方式的差异。
请注意,有些人认为ng-show比ng-switch和ng-ng要快一些,如果是基于文件的模板。 但是您可以使用$ templateCache在引导时预加载您的模板,从而减less或消除该优势。 使用ng-switch和ng-if,不再需要在不需要的时候处理隐藏在DOM中的条件内容,并且防止Angular在不恰当的时候对该内容的expression式进行评估。 这可以节省您不必浪费的处理资源,避免在过早评估某些事情时可能引发的错误。