我有一个组件,可以在一个模块中将其称为组件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不同。
下面是上面的图像
答案 0 :(得分:0)
事实证明,这取决于“ this”上下文。它指的是调用回调的组件,而不是定义该方法的父组件。
因此,如上面的注释中所述,在父组件中将其更改为fetch = () => { ... }
。