单击按钮时不会触发Angular 7.2.0自动更改检测

时间:2019-02-16 19:44:58

标签: angular angular-components angular-ng-if

我有一个组件,可以在一个模块中将其称为组件A,但可以在应用程序根组件模板中使用该组件。组件A使用另一个组件显示按钮元素-我们称它为组件B。

在组件A的模板中,有组件B和另一个组件-我们将此组件称为C。组件C具有* ngIf =“ show”。

组件A的类声明有一个action方法-我们将此方法称为fetch()以及* ngIf的show属性。 show属性设置为false。然后将fetch()方法传递到组件B(按钮组件)上,在该组件上单击(单击)它。

在获取方法中,我将show从false更改为true。令我惊讶的是,我注意到单击此按钮组件时,在组件A的类声明中,show属性将更改为true,但不会在ngIf的模板中选择。

在调试为什么它不起作用时,我在组件B下添加了一个按钮元素,并添加了(click)=“ fetch()”。

这是成功的,并且更改检测有效。

令我惊讶的是,当我将fetch方法传递给组件B进行调用时,更改检测不起作用,但是当我使用模板中添加的按钮来调用同一方法时,它就起作用了。

从5/6版开始,我就不再使用angular了,而我才刚回到它上。

下一步是尝试使show属性对于类是静态的。

我期待最初的实现而不必使用button元素,但是为什么它不起作用。

组件B也属于不同的模块,与组件A不同。

下面是上面的图像

enter image description here

1 个答案:

答案 0 :(得分:0)

事实证明,这取决于“ this”上下文。它指的是调用回调的组件,而不是定义该方法的父组件。

因此,如上面的注释中所述,在父组件中将其更改为fetch = () => { ... }