首页 > 解决方案 > ngAfterViewInit() 没有像我需要的那样准备好更新组件的状态

问题描述

我正在修改一个组件(特别是一个自定义呈现的下拉列表),以允许一个人在 HTML 中传入一个变量并从下拉列表中预先选择一个项目。

ngAfterViewInit()似乎是获取变量的正确位置,然后根据它更新视图。

我无法让它工作。除了实际更新 DOM 以反映更改之外,它做了所有事情。

我最终决定,也许我应该暴力破解它,而不是将变量传递给角度内的函数,我只需抓住 DOM 对象并单击它:

...click()

同样,所有逻辑都会触发,但 DOM 中的状态实际上不会更新以反映这一点。

我终于尝试了“将其包装在 setTimeout 中”的技巧:

setTimeout(function(){
    ...click()
},100);

而且……这有效!

为什么?

我用错了钩子吗?还是误会ngAfterViewInit()

我注意到我可以拨打电话,ngAfterViewChecked()它在那里工作得很好......但问题当然是那个钩子不断被调用,所以如果我把它放在那里,我的 UI 会卡在一个循环中。

我必须使用 setTimeout 是否表明其他地方有问题?(我认为是,但不确定会出现什么问题......)

标签: javascriptangular

解决方案


推荐阅读