javascript - 等待 Angular2 在属性更改后呈现

标签 javascript angular angular2-template

我目前正在开发 Angular2 应用程序,并且面临有关属性更改和生命周期事件的问题。

例子

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

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

问题

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

我尝试过的

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

我也调查了Angular's life cycle钩子(Hook),但它们似乎都不符合我的特定需求。

目标

我想在 Angular 完成渲染 #container 的内容后收到通知,这样我就可以添加 visible 类,而没有其他工作正在进行,并顺利过渡。

非常感谢任何帮助。

最佳答案

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).

关于javascript - 等待 Angular2 在属性更改后呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37616287/

相关文章:

javascript - 处理 promise 中的错误的正确方法是什么?

Angular 2 : Cannot set property 'location' of null

angular - 如何在 Angular Material 数据表中添加额外的标题和行?

javascript - 删除动态创建的页面元素

javascript - 有没有办法在 Internet Explorer 中使用 window.hasOwnProperty()?

javascript - 在服务器进程完成重启之前 gulp-livereload 重新加载

node.js - 类型错误 : Socket is not a constructor

angular - 如何绑定(bind)到 '*ngSwitchCase'

javascript - Angular 5 : Build json from values

css - Angular 2 外部样式没有内联到标题