Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么jQuery代码总是在Angular AfterViewInit方法中使用?_Jquery_Angular_Jquery Ui_Lifecycle - Fatal编程技术网

为什么jQuery代码总是在Angular AfterViewInit方法中使用?

为什么jQuery代码总是在Angular AfterViewInit方法中使用?,jquery,angular,jquery-ui,lifecycle,Jquery,Angular,Jquery Ui,Lifecycle,我一直在Angular应用程序中使用jQueryUI小部件。我在Stack Overflow上见过很多有经验的开发人员建议大家避免使用jQuery和Angular。虽然经过大量的努力,我已经能够使这个小部件与Angular应用程序兼容,但我心里还是有些怀疑 我在许多关于堆栈溢出的回答中看到,我们应该在ngAfterViewInit()方法中使用小部件初始化和其他jQuery代码。但即使在研究了 生命周期挂钩,在组件的视图完全打开后调用 初始化 到目前为止,我还不能理解为什么在ngAfterVie

我一直在Angular应用程序中使用jQueryUI小部件。我在Stack Overflow上见过很多有经验的开发人员建议大家避免使用jQuery和Angular。虽然经过大量的努力,我已经能够使这个小部件与Angular应用程序兼容,但我心里还是有些怀疑

我在许多关于堆栈溢出的回答中看到,我们应该在ngAfterViewInit()方法中使用小部件初始化和其他jQuery代码。但即使在研究了

生命周期挂钩,在组件的视图完全打开后调用 初始化


到目前为止,我还不能理解为什么在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
时,DOM
div
元素将仅在随后的更改检测周期中添加到DOM中。这意味着,例如,如果您试图使用
jQuery
NgAfterViewInit/Checked
之前在DOM中定位该元素,您将找不到它。这基本上适用于任何DOM操作指令,如
ngFor

您可以在以下文章中阅读有关DOM操作和更改检测的更多信息:


嘿,我的答案有什么不清楚的地方吗?