为什么jQuery代码总是在Angular AfterViewInit方法中使用?
我一直在Angular应用程序中使用jQueryUI小部件。我在Stack Overflow上见过很多有经验的开发人员建议大家避免使用jQuery和Angular。虽然经过大量的努力,我已经能够使这个小部件与Angular应用程序兼容,但我心里还是有些怀疑 我在许多关于堆栈溢出的回答中看到,我们应该在ngAfterViewInit()方法中使用小部件初始化和其他jQuery代码。但即使在研究了 生命周期挂钩,在组件的视图完全打开后调用 初始化为什么jQuery代码总是在Angular AfterViewInit方法中使用?,jquery,angular,jquery-ui,lifecycle,Jquery,Angular,Jquery Ui,Lifecycle,我一直在Angular应用程序中使用jQueryUI小部件。我在Stack Overflow上见过很多有经验的开发人员建议大家避免使用jQuery和Angular。虽然经过大量的努力,我已经能够使这个小部件与Angular应用程序兼容,但我心里还是有些怀疑 我在许多关于堆栈溢出的回答中看到,我们应该在ngAfterViewInit()方法中使用小部件初始化和其他jQuery代码。但即使在研究了 生命周期挂钩,在组件的视图完全打开后调用 初始化 到目前为止,我还不能理解为什么在ngAfterVie
到目前为止,我还不能理解为什么在ngAfterViewInit方法中使用jQuery代码。我使用selectMenu jQuery UI小部件,然后通过单击按钮来更改下拉列表的数据,我在ngAfterViewChecked()方法中初始化了小部件。虽然它成功地工作了,但我不明白它为什么工作。因此,有谁能解释一下这个主题,并告诉我为什么jQuery代码通常以Angular的形式放在ngAfterViewInit中,以及何时检查ngAfterViewInit?Angular将DOM更改作为更改检测的一部分
NgAfterViewInit/Checked
是一个生命周期挂钩,表示当前组件的更改检测的DOM呈现部分已完成。在此之前,某些DOM元素可能无法反映组件的正确状态。这里有一个例子。如果您有以下模板:
<div class="list" *ngIf="value">...</div>
。。。
组件类中的属性value
为false
,DOM中将没有div
元素。当您将值
更改为true
时,DOMdiv
元素将仅在随后的更改检测周期中添加到DOM中。这意味着,例如,如果您试图使用jQuery
在NgAfterViewInit/Checked
之前在DOM中定位该元素,您将找不到它。这基本上适用于任何DOM操作指令,如ngFor
等
您可以在以下文章中阅读有关DOM操作和更改检测的更多信息: