【发布时间】:2017-10-23 10:48:05
【问题描述】:
我想访问子组件文本区域中的文本,以将其放在父组件上并保持更新。
有人告诉我,角度 4 中的 @input 应该执行双向绑定。但我不能那样做,我不明白为什么。
我找到了解决此问题的方法。它包含一个 @Output 来将信息发送到父组件。但是如果 Input 已经这样做了(在某种程度上我不知道),我想避免它。
例如,这是我的父组件
import { Component } from '@angular/core';
@Component({
selector: 'app-settings',
templateUrl: './settings.component.html',
})
export class SettingsComponent {
private studyDesignText = 'Text';
constructor() {
}
public handleStudyDesignUpdated(designText: any) {
this.studyDesignText = designText;
}
}
这是html
<div class="section section-trials-settings-parent light rounded">
<div class="section section-trials-settings-child">
<div class="pure-g">
<div class="pure-u-1-1">
<app-settings-study-design
[studyDesignText]="studyDesignText">
</app-settings-study-design>
</div>
</div>
</div>
</div>
我的子组件:
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'app-settings-study-design',
templateUrl: './settings-study-design.component.html',
})
export class SettingsStudyDesignComponent implements OnInit {
@Input() studyDesignText: string;
constructor() {
}
ngOnInit() {
super.onInit();
loadControls();
}
loadControls(): void {
this.startAllTextAreas();
}
private startAllTextAreas() {
this.startTextArea('study-design-textarea');
}
private startTextArea(htmlId: string) {
// code to configure my text area; it's right...
}
如果我更改文本区域中的值并使用@Output 发送信号,以便通知我的父组件并控制台记录该值,则打印的值是初始值。我的朋友也做了同样的事情,而且效果很好。
我错过了什么?
【问题讨论】:
-
您需要一个
EvenEmitter<string>并在您的父级中使用相同的事件处理程序 -
这个想法是避免使用 EventEmitter。有没有其他办法?
标签: javascript angular typescript