如何在Angular4中调用子函数?

如何在Angular4中调用子函数?,angular,Angular,我需要调用名为toggle()的子函数,它位于“我的应用程序”组件中(我的应用程序是子组件)。 如何从父组件调用此函数 子组件: @Component({ selector: 'my-app', templateUrl: './my-app.component.html' }) export class MyAppComponentimplements OnInit, OnChanges { toggle() { //1.load data from data storage i

我需要调用名为toggle()的子函数,它位于“我的应用程序”组件中(我的应用程序是子组件)。 如何从父组件调用此函数

子组件:

@Component({
    selector: 'my-app',
    templateUrl: './my-app.component.html'
})
export class MyAppComponentimplements OnInit, OnChanges {
toggle()
{
//1.load data from data storage if not exist (this was cut out, to simplify code)
this.visible = !this.visible
}
}
父html代码:

<a *ngIf="hasValue()" (click) = "toggle()?"></a> // I would like to invoke toggle() function when <a> element is clicked.
<my-app></my-app>
//我想在单击元素时调用toggle()函数。

有没有办法调用这个函数?通过委托或其他方式?

您可以通过在父组件中获取对子组件的引用来实现这一点



将布尔事件从您的子级提升到父级(通过
@Output()
),然后在父级中的事件处理程序中执行您想要的操作(包括调用
toggle()
)。

通常情况下,您不需要。数据流向孩子,行动流向父母。如果你还需要什么,考虑一下服务,这是可能的,但通常不是一个好主意。这里您只需要在子组件中输入一个布尔值,由父组件传递。toggle函数检查@input LazyLoad是否设置为true。如果是,则从本地存储而不是数据库加载数据。通常,我可以使用另一个@input';可见';在我的应用程序组件中,但我不知道如何检测何时可见更改使用带有
@Input
装饰的setter,或使用ngOnChanges。这里描述了这两种情况:我怀疑
my app
是一个根组件。请注意,如果您只打算在模板中使用引用,则不需要在组件类型脚本代码中设置
ViewChild
引用。如果子组件中发生事件,您的解决方案会起作用,以及要执行父组件的方法。问题中的问题正好相反:当父组件中发生事件时,如何调用子组件的方法。(注意:我不是downvoter)正如他的模板代码所示,他希望在单击child时调用parent中的函数。这正是我所描述的。@deezg不,你需要阅读这个问题。当父对象中的链接被点击时,他想调用子对象的一个方法。确切地说,我描述得很糟糕。我搞砸了:<不过还是谢谢你!哦,现在我明白了。实际上,他想调用同级上的方法。是的,我理解错了。谢谢你指出这一点!;)