javascript - ngAfterViewInit() 没有像我需要的那样准备好更新组件的状态
问题描述
我正在修改一个组件(特别是一个自定义呈现的下拉列表),以允许一个人在 HTML 中传入一个变量并从下拉列表中预先选择一个项目。
ngAfterViewInit()
似乎是获取变量的正确位置,然后根据它更新视图。
我无法让它工作。除了实际更新 DOM 以反映更改之外,它做了所有事情。
我最终决定,也许我应该暴力破解它,而不是将变量传递给角度内的函数,我只需抓住 DOM 对象并单击它:
...click()
同样,所有逻辑都会触发,但 DOM 中的状态实际上不会更新以反映这一点。
我终于尝试了“将其包装在 setTimeout 中”的技巧:
setTimeout(function(){
...click()
},100);
而且……这有效!
为什么?
我用错了钩子吗?还是误会ngAfterViewInit()
?
我注意到我可以拨打电话,ngAfterViewChecked()
它在那里工作得很好......但问题当然是那个钩子不断被调用,所以如果我把它放在那里,我的 UI 会卡在一个循环中。
我必须使用 setTimeout 是否表明其他地方有问题?(我认为是,但不确定会出现什么问题......)
解决方案
推荐阅读
- java - Java - 如何一次或从一个文件夹中依次运行几个 shell/bat 文件
- go - 在golang中使用可变参数切片调用函数
- c++ - 当稀疏矩阵变得太大时,通过 Eigen 的 Cholmod 失败(Int 溢出错误)
- angular - 在 iframe 内渲染 ZIP 压缩的 SPA
- python - 如何从数据框中包含列表的列创建新列
- php - 为什么 WooCommerce 中的dashboard.php 不能显示图像
- dart - Dart 中 Future 对象的机制
- javascript - React Contextprovider 强制更新 Video Element 来播放 Video
- git - 当具有更改文件的分支合并到主分支时,Git 不会引发合并冲突
- python - 带有日期选择器的 Python selenium