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

时间:2018-01-08 17:37:32

标签: jquery angular jquery-ui lifecycle

我一直在使用Angular应用程序中的jQuery UI小部件。我在Stack Overflow上看到许多经验丰富的开发人员建议大家避免在Angular中使用jQuery。虽然经过大量的努力,我能够使该小部件与Angular应用程序兼容,但我还是有一定的疑虑。

我在Stack Overflow的许多答案中都看到我们应该在ngAfterViewInit()方法中使用widget初始化和其他jQuery代码。但即使在查看AfterViewInit的定义之后,即

  

在组件的视图完全被调用之后调用的生命周期钩子   初始化。

到目前为止,我无法理解为什么在ngAfterViewInit方法中使用jQuery代码。我正在使用selectMenu jQuery UI小部件,然后通过单击按钮更改下拉列表的数据,我在ngAfterViewChecked()方法中初始化了小部件。虽然它运作成功但我无法理解为什么它有效。所以任何人都可以了解这个主题并告诉我为什么jQuery代码通常放在Angular中的ngAfterViewInit中并且当检查ngAfterViewInit时?

1 个答案:

答案 0 :(得分:1)

Angular应用DOM更改作为更改检测的一部分。 NgAfterViewInit/Checked是一个生命周期钩子,它表示当前组件的变换检测的DOM呈现部分已完成。在此之前,某些DOM元素可能无法反映组件的正确状态。这是一个例子。如果您有以下模板:

<div class="list" *ngIf="value">...</div>

组件类中的属性valuefalse,DOM中没有div元素。当您将value更改为true时,DOM div元素将仅在随后的更改检测周期中添加到DOM。这意味着,例如,如果您尝试使用NgAfterViewInit/CheckedjQuery之前在DOM中找到该元素,则无法找到它。这基本上适用于任何DOM操作指令,如ngFor等。

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