【问题标题】:How to call function from child component in parent component如何从父组件中的子组件调用函数
【发布时间】:2024-05-21 05:35:02
【问题描述】:

我有父组件

<div md-dialog-content>
  <div class="section-top">
    <p id="title" style="float:left;">Adding Dockument</p>
    <div md-dialog-actions style="float:right;">
      <button class="edm-button inline" md-button (click)="onNoClick()" tabindex="-1">Cancel</button>
      <button class="edm-button inline" md-button (click)="onClick()" tabindex="-1">Confirm</button>
    </div>
  </div>
  <div>
    <app-document-data [buttonMessage]="buttonMessage"></app-document-data>
  </div>
</div>

在子组件中我有方法 onSubmit() { }

当我单击父组件中的按钮确认时,我有一个问题何时调用 onSubmit() 函数。

我知道我可能应该使用 @Input 和 @Output 装饰器,但我不知道如何正确。

【问题讨论】:

  • onSubmit 方法是否属于 app-document-data 组件?
  • @Faly,是的 onSubmit 方法属于 app-document-data

标签: javascript angular typescript angular2-components


【解决方案1】:

还有更简单的:给你的孩子一个模板参考,你可以像这样调用它的函数:(我猜你的第二个按钮会调用)

<div md-dialog-content>
  <div class="section-top">
    <p id="title" style="float:left;">Adding Dockument</p>
    <div md-dialog-actions style="float:right;">
      <button class="edm-button inline" md-button (click)="onNoClick()" tabindex="-1">Cancel</button>
      <button class="edm-button inline" md-button (click)="appDD.onSubmit()" tabindex="-1">Confirm</button>
    </div>
  </div>
  <div>
    <app-document-data #appDD [buttonMessage]="buttonMessage"></app-document-data>
  </div>
</div>

【讨论】:

  • 这更像是一个建议,而不是他的问题的答案,可以作为评论发布。
  • 好吧,你自己试试,把代码贴在评论里!
  • 似乎对我不起作用。 无法读取未定义的“保存”属性 &lt;edit-order #editOrderRef&gt;&lt;/edit-order&gt; &lt;button class="button-success" (click)="editOrderRef.save()"&gt;Save&lt;/button&gt;
【解决方案2】:

在你的父组件中:

onClick(){
  this.buttonMessage = true;

在您的孩子中:

@Input() buttonMessage: boolean;

还有一个 ngOnChanges:

ngOnChanges(changes: any) {
  if(changes.buttonMessage.currentValue){
     this.onSubmit();

【讨论】:

  • Swoox 工作正常,ngOnchanges() 只执行一个,但我需要该方法执行比我在 ngOnChanges set buttonMessage = false 中尝试的更多,现在使用@Output 向父级发送数据
  • 这是因为您需要再次将值更改为 false。如果 buttonMessage.currentValue === truebuttonMessage.previousValue === true ,ngOnChanges 不会改变。它必须是 buttonMessage.previousValue === false抱歉回复晚了
  • 我发现只使用本地引用更简单的方法
最近更新 更多