【问题标题】:Child component value not setting in Angular 2?Angular 2 中未设置子组件值?
【发布时间】:2018-07-12 14:15:14
【问题描述】:

所以我将子组件的值标记如下:

@Input flag;

然后在我的特定方法中:

myParentComponent.flag = true;

然后在我的父组件的html中:

<app-childComponent-template [flag] = flag ></app-childComponent-template>

我正在使用 Chrome 的检查工具来查看我记录更改的控制台。但是,当我在子组件中将标志设置为 true 时,它​​可以工作,但它不会延续到父组件,我不知道为什么。我已多次阅读此文档 (https://angular.io/guide/component-interaction),但一切似乎都相应匹配。

谢谢!

【问题讨论】:

  • “继承到父组件”是指当您更新子组件中的字段时,您希望它也反映在父组件中?
  • 是的。抱歉,我有时会用自己的术语来描述事物。

标签: html angular


【解决方案1】:

语法[flag] 表示它是一种单向数据绑定:父级将对flag 的更改推送给子级。但是更改子级的 @Input flag 变量不会对父级产生更改。

为此,您需要在子组件中使用@Output

@Input('flag') flag;
@Output('flag') flagChanged = new EventEmitter<boolean>();

然后,为了通知父级标志已更改,从子组件发出一个事件:

this.flagChanged.emit(newFlagValue);

最后,要被告知父组件的变化:

<app-childComponent-template [flag]="flag" (flag)="onFlagChanged($event)"></app-childComponent-template>

onFlagChanged(newValue) {
    alert(`New flag value: ${newValue}`);
}

【讨论】:

  • 这太棒了,谢谢!那我还需要@Input吗?我不需要父母向孩子推送任何东西。
  • 如果您不从父母与孩子沟通,则不需要在孩子中使用@Input()
  • @RainyAngel 如果您最终向孩子提供flag,但只是希望孩子和父母的字段同步,您可以查看“双向绑定” - 有句法[flag]="flag" (flag)="flag=$event" 的糖,被称为“盒子里的香蕉” - 请参阅 angular.io/guide/template-syntax#two-way-binding---
猜你喜欢
  • 2017-07-04
  • 2017-08-27
  • 2019-04-21
  • 2017-03-27
  • 2016-07-04
  • 2017-08-04
  • 2017-10-07
  • 2018-06-18
  • 2017-01-23
相关资源
最近更新 更多