替代ng-show/-hide或如何仅加载DOM的相关部分

mur*_*a52 53 angularjs

使用ng-show/-hide时,这些块中包含的内容最初显示在用户屏幕上.仅在几毫秒之后(在angular.js加载并执行之后),右边的块显示在ng-show中.

有没有比ng-show/-hide更好的方法只将相关的数据部分加载到DOM中?

ng-view的问题是我在页面上只能有一个,所以我必须根据当前状态切换DOM的许多部分的行为.

Mar*_*cok 106

要避免"未编译内容的闪存",请使用ng-bind代替{{}}或使用ng-cloak:

<span ng-cloak ng-show="show">Hello, {{name}}!</span>
Run Code Online (Sandbox Code Playgroud)

如果您使用ng-cloak,并且未在HTML的head部分加载Angular.js,则需要将其添加到CSS文件中,并确保它在页面顶部加载:

[ng\:cloak], [ng-cloak], .ng-cloak { display: none; }
Run Code Online (Sandbox Code Playgroud)

请注意,您只需要在初始页面上使用这些指令.稍后提取的内容(例如,通过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>
Run Code Online (Sandbox Code Playgroud)

有关ng-switch与ng-include一起使用的示例,另请参阅/sf/answers/880934211/.

请注意,ng-switch和ng-if添加/删除DOM元素,而ng-show/hide仅改变CSS(如果这对您很重要).

  • @ user1226868,感谢您的评论.我重写了我的回答,基本上注意到如果你在页面底部加载Angular(通常是[推荐](http://docs.angularjs.org/guide/bootstrap)),CSS加载太晚了.另外,引用ng-cloak API页面"为了获得最佳结果,必须在html文件的head部分中加载angular.js脚本;或者,css规则(上面)必须包含在应用程序的外部样式表中". (3认同)