【发布时间】:2018-11-29 03:08:57
【问题描述】:
我正在努力完全掌握组件生命周期。我已经创建了一个组件,但是我需要在 DOM 完成后运行我的自定义 javascript 函数。我浏览了 EmberJS Docs 和 Stackoverflow,但我遇到的任何文档都没有按我的预期工作。
我的问题
我尝试使用didInsertElement 和didRender,但在我的重复元素加载到DOM 之前它们仍然会被调用。在 DOM 完全呈现后,如何规避此问题以让我的 Javascript 运行。
我的尝试
下面是一个非常精简的准系统示例,使用alert 代替我的脚本。期望的结果是在渲染 DOM 之后让这个 alert 出现,下面的示例在它之前有警报。
import Component from '@ember/component';
export default Component.extend({
didRender() {
alert('didRender');
},
didInsertElement() {
alert('didInsertElement');
}
});
提前致谢。
【问题讨论】:
-
“重复元素”是什么意思?
-
组件正在使用 json 提要添加图片库。此元素列表正在转发器中生成。 {{#each foo as |bar|}}
- {{/each}}
-
所以您想在所有这些都完成后完全运行代码?我认为您可以通过将每个块包装在一个组件中并在其中使用 didRender / didInsertElement 来做到这一点
-
每个块已经在一个组件.hbs中,这就是为什么会出现混乱。从我阅读的所有内容来看,它应该在“创建”DOM 之后呈现我的函数,但它没有这样做。从理论上讲,我希望其中任何一个都能像 React 中的 componentDidMount() {} 那样工作。
-
它确实像 React 中的 componentDidMount 一样工作。我会在答案中解释,一秒
标签: javascript ember.js