2014-01-15 85 views
9

我有当有按键cliked是滑动的菜单,但在开始这个菜单是隐藏的,这样的事情:ngShow读取延迟问题

<div ng-show="menuShow"> 
    my menu here... 
</div> 

的问题是,当页面加载菜单不隐藏(可能是因为ngShow指令没有加载),然后它们消失(可能是因为ngShow指令被加载),并使菜单产生奇怪的“闪烁效果”。

处理这个问题的最佳方法是什么?

+0

http://stackoverflow.com/questions/14068711/alternative-to-ng-show-hide-or-how-to-load-only-relevant-section-of-dom –

回答

16

最快最简单的做法是将ngCloak指令添加到元素。

<div ng-show="menuShow" ng-cloak> 
    my menu here... 
</div> 

只要角在文档的头部同步加载,这应该防止闪烁。

如果你不加载角同步,那么according to the docs,你可以手动将CSS添加到页面:

[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { 
    display: none !important; 
} 

如果这是不可能因为某些原因,你可以你就必须全部Angular内容不在初始加载的页面中,但包含在ng-include,ng-viewui-view指令中,或包含自己的模板的自定义指令。 (这是我怎么做的,但更多的是因为结构原因)

+0

嗨!我碰到了完全相同的问题,但是你的答案中的两个选项对我来说都不起作用:(任何想法?http://stackoverflow.com/questions/30540119/how-to-remove-delay-from-ngshow -initialization –

+0

由于同步分化,这是一个很好的答案。在我的情况下,angular并没有加载到头部,所以我不得不手动添加CSS类。 –

1

即使应用CSS规则,我也无法获得ng-cloak的工作,所以我最终使用了ng-ifhttps://docs.angularjs.org/api/ng/directive/ngIf

这将导致更多的开销角实际上会从DOM中删除的对象,每次都重新加载它的ng-if的值发生变化,但对我来说,这不是很频繁,开销并不明显。