Angular 5从子组件更新父组件值

Posted

技术标签:

【中文标题】Angular 5从子组件更新父组件值【英文标题】:Angular 5 Update Parent Component value from child Component 【发布时间】:2018-07-15 01:05:18 【问题描述】:

子组件 TS

import  Component, OnInit, Input, Output  from '@angular/core';
import  EventEmitter  from 'events';

export class ChildComponent implements OnInit 
    @Output() OpenScheduleCall = new EventEmitter<boolean>();

    onLog() 
          this.OpenScheduleCall.emit(false);
    

父组件 HTML:

<div [(hidden)]="OpenScheduleCall">
// content
</div>
<app-schedule-call *ngIf="!!OpenScheduleCall" [prospectid]='prospectid'  [(OpenScheduleCall)]="OpenScheduleCall"></app-schedule-call>

我在子组件中设置值,但更改未反映在父组件中

【问题讨论】:

【参考方案1】:

您尚未将OpenScheduleCall 标记为子组件的输入,因此首先您需要这样做。并且要实现与盒子里的香蕉的双向绑定,你的@Output需要是@Input变量名,后缀为Change。所以首先将变量OpenScheduleCall 标记为@Input 为child,然后更改@Output 变量的名称:

export class ChildComponent implements OnInit 

  @Input() OpenScheduleCall;
  @Output() OpenScheduleCallChange = new EventEmitter<boolean>();

  onLog() 
   this.OpenScheduleCallChange.emit(false);
  

现在你有了双向绑定:

[(OpenScheduleCall)]="OpenScheduleCall"

【讨论】:

对此新手的注意:这仅在输入/输出变量名称匹配时有效,但输出末尾有Change。在此示例中,将输出命名为 OpenScheduleCallEvent不起作用 @ChrisBarr 我相信我在回答中已经提到了这一点,可能不够清楚(?)但感谢您的意见! :) 大声笑,你是对的 - 对不起!我只是在没有阅读您的描述的情况下使用了您的代码,根据自己的喜好更改了 var 名称,然后记住了这个技巧并将其发布在这里。【参考方案2】:

只是Output 不能在双向数据绑定中。在有界函数末尾添加()

(OpenScheduleCall)="YourFunctionInParent($event)"

【讨论】:

我必须设置变量值OpenScheduleCall = false。我必须为此编写一个 setter 函数。? 输出需要从孩子那里获取数据。你的子组件只有Output参数,所以只能绑定() 我还是很困惑,YourFunctionInParent 什么时候会触发。你能改变我的代码吗?或建议任何有效的 plnkr。 YourFunctionInParent 将在子级中的OpenScheduleCall 发出时触发

以上是关于Angular 5从子组件更新父组件值的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular 1.5 中,如何从子组件编译父组件的 html?

如何将数据从子组件传递到父组件[Angular]

从Angular 5中的子组件更新父布尔值

当父组件使用 ng-content Angular 时从子组件访问父组件

Angular 2:从子组件直接发射到父组件的脚本文件

vuejs 从子组件更新父数据