1

最近迁移到 1.2.0-rc1 并且非常满意。尤其是ngIfngShow. 除了布尔值变化时有一些闪烁。有关示例,请参见下面的 plunkr: http ://plnkr.co/edit/iYMm0IHZkrRamlaEs9yD?p=preview

在 Chrome (v28) 上,您会看到前 2 个实现会闪烁,而其他 2 个则不会。在 Firefox 上,闪烁很少发生。

这正常吗?有没有办法避免这种情况?我应该回去使用ngShow吗?

编辑: 正如 sza 所说,ngIf 并ngSwitch修改 DOM,而ngShow使用 css 规则来显示/隐藏元素。在 Angular 1.0.7 中,ngSwitch已经存在并且已经在修改 DOM,并且非常棒,因为我们大量使用它来代替ngShow未显示的东西的昂贵渲染。现在,如果您查看http://plnkr.co/edit/pIpEYZ5K8xvfd9dhAC74?p=preview,您会发现 ngSwitch 从 1.0.7 开始没有闪烁。

我期望的答案是“这是正常行为,您正在使用ngSwitch并且ngIf不应该使用它们,只有静态内容应该与ngSwitchand一起显示ngIf”或“这是一个渲染错误,忍受它直到它是固定的”。当然,解决方法也很好(@timp,我已经看到了您的答案,但恐怕我需要一个可行的示例)。

4

3 回答 3

3

我在 google 组上问了同样的问题,答案是它是动画模块中的一个错误: https ://groups.google.com/d/msg/angular/Fy-rVdXh5WQ/aqhppEl8Nw0J

删除对动画模块的依赖将修复闪烁。

于 2013-08-20T18:15:19.000 回答
2

如果查看源代码,您会看到两者都ngIfngSwitchDOM 操作有关,而ngShowHide仅操作 CSS 而不是 DOM。

我想 DOM 操作在回流方面会比 CSS 更改稍微贵一些,并且在不同的浏览器中可能会有所不同。

于 2013-08-20T15:55:26.570 回答
0

如果您尝试 AngularJS 文档页面 (链接) 上的 ngIf 演示,它会遇到您在快速切换复选框时描述的相同问题。

如果渲染的改进很重要,请尝试将 替换为checked两个布尔值。这样,您可以指定首先评估 ngIf 的顺序。这是一种痛苦,但它可以完成工作。

于 2013-08-20T15:38:44.543 回答