最近迁移到1.2.0-rc1并对它非常满意。与ngIf
相比,尤其对于ngShow
而言,这可能是渲染方面的重大改进。
除非布尔值发生变化,否则会有一些闪烁。请参阅下面的plunkr示例:
http://plnkr.co/edit/iYMm0IHZkrRamlaEs9yD?p=preview
在Chrome(第28版)中,您会看到前2个实现会闪烁,而其他2个实现则不会闪烁。 在Firefox上,闪烁很少发生。
这是正常的吗?有没有办法避免这种情况?我应该回去使用ngShow
吗?
修改
正如sza所说,ngIf和ngSwitch
修改DOM,而ngShow
使用css规则来显示/隐藏元素。在角度1.0.7中,ngSwitch
已经存在并且已经在修改DOM并且非常好,因为我们使用它代替ngShow
以避免昂贵的渲染未显示的内容。
现在,如果你看一下http://plnkr.co/edit/pIpEYZ5K8xvfd9dhAC74?p=preview,你会发现1.0.7的ngSwitch没有闪烁。
我期待的答案可能是“这是正常行为,您使用ngSwitch
和ngIf
不应该使用它们,只有静态内容应该显示{ {1}}和ngSwitch
“或”这是一个渲染错误,与它一起使用直到它被修复“。当然一个解决方法也很好(@timp,我已经看到了你的答案,但我担心我需要一个有效的例子)。
答案 0 :(得分:3)
我在谷歌小组上问了同样的问题,答案是它是动画模块中的一个错误: https://groups.google.com/d/msg/angular/Fy-rVdXh5WQ/aqhppEl8Nw0J
删除对动画模块的依赖性将修复闪烁。
答案 1 :(得分:2)
如果你查看源代码,你会发现ngIf
和ngSwitch
都与DOM操作有关,而ngShowHide
只操纵CSS而不是DOM。
我认为在回流方面,DOM操作比CSS更改略贵,并且在不同的浏览器中可能会有所不同。
答案 2 :(得分:0)
如果您在AngularJS文档页面(link)上尝试ngIf演示,则会在快速切换复选框时遇到与您所描述的问题相同的问题。
如果渲染的改进很重要,请尝试用两个布尔值替换checked
。这样,您可以指定首先评估ngIf的顺序。这是一种痛苦,但它确实起到了作用。