Prevent double curly brace notation from displaying momentarily before angular.js compiles/interpolates document
这似乎主要是IE中的一个问题,当有许多图像/脚本需要加载时,标记中的文字{{stringExpression}}可能会显示很长一段时间,然后在完成文档的编译/插入后,角度消失。
是否有一个共同的原因会发生这种情况,这表明我做了一些普遍错误的事情,或者有一个已知的方法来防止这种情况发生?
- 这可以帮助branchandbound.net /博客/网站/ 08 /一些/ 2013 angularjs - pitfalls
- 上述解决方案是正确的
我认为您正在寻找ngCloak指令:https://docs.angularjs.org/api/ng/directive/ngcoat
从文档中:
The ngCloak directive is used to prevent the Angular html template
from being briefly displayed by the browser in its raw (uncompiled)
form while your application is loading. Use this directive to avoid
the undesirable flicker effect caused by the html template display.
The directive can be applied to the element, but the preferred usage is to apply multiple ngCloak
directives to small portions of the page to permit progressive rendering of the browser view
- 为了避免原始角度HTML代码,ngCloak是否广泛/最佳实践?这看起来很简单,但我在安古拉吉没有经验。
- 我认为如果您在主体的末尾加载所有脚本,这将不起作用。
- 不会的。我想知道还有没有别的办法?也许是一种检测所有控制器何时加载的方法?
- aaah,wait,nvm,loas的答案是最后加载脚本时的解决方案。使用.ng斗篷类。
- 在HTML的部分加载angularjs脚本,使ngCloak生效。
- 如果我在页面的部分中加载angular.js,我可以确认它完全工作。
- 如果你使用最新的角度版本(+1.5),添加NG斗篷就足够了。
另外,您可以使用而不是{{hello}}。
http://jsfiddle.net/4lhn9/34/
- 关于ng bind的一个特性有时被忽略,那就是当angular正在加载时,可以指定要显示的文本:Loading…。正在加载…"将出现,定义myScopeProperty后将替换它。
- @马克:谢谢你的小费!我不知道。这非常简单和优雅,解决了我自己遇到的一个问题。
- 如果需要多个表达式,请使用ngbindtemplate。例如,正在加载…。
- 你也可以做你好加载…'
- @安迪约斯林不错。使用这种方法,Angular JS脚本需要位于头部,而不是页面底部,以避免页面加载时表达式闪烁。
- 使用ng bind为我修复了branchandbound.net/blog/web/2013/08/some-angularjs-pitfalls
- 您好'正在加载…'是个坏主意。因为如果您想在NG控制器中显示一些绑定了标志的元素,那么所有的元素都会显示出来,而UI也会一团糟。唯一的解决办法是NG斗篷。在最新的AngularJS版本中不需要CSS。
- 另外,如果您有大代码,绑定也不是一个好主意,那么您需要将所有这些代码从更新为ng bind。
- 我相信这才是真正的答案!
为了提高最后加载脚本时class='ng-coat'方法的有效性,请确保在文档头中加载以下CSS:
1
| .ng-cloak { display:none; } |
- 添加!重要也不是坏主意。
- 江户十一〔五〕不是更好吗?
- @Eomeroff,但是!important是一个CSS黑客(不好的东西)来促进一种风格的选择,对吗?它打破了CSS选择器规则。
- 嗯,这是其中一个案例!为引入了重要信息。
- @Mark我想"visibility:hidden"仍然会呈现模板标记所需的空间,而"display:none"则根本不会呈现任何内容。只有隐藏的可见性,任何外部元素都可能突然塌陷到真正的内部大小,而不是从无到有地增长到大小。我想这是任何人喜欢的。:)
- @詹姆斯威尔金斯:是的,你说得对。我写这篇文章的时候可能没有考虑尺寸的差异。
- 可见性与显示只是一个优先事项。两样都试试!
- @jameswilkins可见性:隐藏或显示:没有都是很好的选项,这取决于目标——如果目标是保留文档的结构,那么可见性:隐藏效果很好,否则显示:没有。
- @Mjwunderlich:正如我所说,"这是任何人喜欢的。",所以你只是在改写我所说的。P);
- @Jameswilkins我重新编写并扩展到澄清。
- @Mjwunderlich:为了谁,我?(既然你把我的名字贴上了标签)哈哈,我觉得我很详细也很清楚,但我想我对每个人都很清楚。P
只需将隐藏的CSS添加到页面头部或某个CSS文件:
1 2 3
| [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak, .ng-hide {
display: none !important;
} |
然后您可以根据正常的角度实践使用ngcoat指令,它甚至在角度本身加载之前也会工作。
这正是Angular所做的:Angular.js末尾的代码将上述CSS规则添加到页面的头部。
- +我自己设计了[ngcloak]选择器,但这更完整。
- 答案真棒!我在身体末端加载角,所以ngcoast不可用,它仍然闪烁。这是固定的。
在CSS中添加以下内容
1 2 3
| [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
display: none !important;
} |
然后在代码中可以添加ng coat指令。例如,
就是这样!
您也可以使用ng-attr-src="{{variable}}"而不是src="{{variable}}",并且只有在编译器编译模板之后才会生成该属性。这在文档中提到:https://docs.angularjs.org/guide/directive-ngattr属性绑定
- stackoverflow.com/a/16669790/1175496
我同意@pkozlowski.opensource的回答,但ng clock类不适合我使用ng repeat。因此,我建议您使用类来表示简单的分隔符表达式,如name和ngcoat指令来表示ng repeat。
和
1 2
| <li ng-repeat="item in items" ng-cloak>{{item.name}}
<li> |