等待 Angular2 在 属性 更改后呈现

Wait for Angular2 to render following property change

我目前正在开发一个 Angular2 应用程序,我正面临一个关于 属性 变更和生命周期事件的问题。

例子

假设我有一个基于 属性 呈现的简单模板。我希望 #container 在渲染完成之前保持隐藏状态,然后将 visible class 添加到它以使其显示。

<div id="container">
    <p *ngFor="let value in values">
        {{value}}
    </p>
</div>

问题

问题是.visible也定义了一个过渡,浏览器根本无法同时处理Angular的渲染和过渡,所以它很简单地停了一会儿,然后 #container 就会卡入。

我试过的

为过渡设置足够长的时间可以解决问题,但我不想更改它。

我也研究了 Angular's life cycle 个钩子,但其中 none 个似乎符合我的特定需要。

目标

我希望在 Angular 完成渲染 #container 的内容后收到通知,以便我可以添加 visible class 而没有其他工作正在完成,并顺利过渡。

非常感谢任何帮助。

Mark Rajcok 的评论让我开始思考,我查找了在下一个可能的时刻采取行动的不同方法,包括 setTimeoutrequestAnimationFrame,最后是 setImmediate

我决定接受 setImmediate,因为这似乎是将操作推迟到下一个浏览器滴答的最直接方式。

请注意,setImmediate 目前只是一个提案,我只能使用它,因为 core-js 已经实施了它。它甚至可能在未来成为标准。

https://developer.mozilla.org/en-US/docs/Web/API/Window/setImmediate

Note: This method is not expected to become standard, and is only implemented by recent builds of Internet Explorer and Node.js 0.10+. It meets resistance both from Gecko (Firefox) and Webkit (Google/Apple).