【发布时间】:2019-02-26 02:39:39
【问题描述】:
我正在学习 Angular 6,我认为我做得对,但我正面临“问题怀疑”
我有一个父母和一个孩子:
- 我的父母正在使用输入绑定向我的孩子分享信息
- 按钮触发更新信息的功能
- 父母通过@ViewChild 调用子函数
可以在这里找到Stackblitz
我的父组件看起来像:
HTML:
This is the parent
<child [data]="my_data"></child>
<button (click)="fireAll()">Fire All!</button>
打字稿:
export class AppComponent {
@ViewChild(ChildComponent) childComp: ChildComponent;
my_data = 'Nothing yet';
public fireAll(){
this.my_data = "I want to show this info in console";
this.childComp.writeToConsole();
//setTimeout(()=>this.childComp.writeToConsole(), 500); //This works well
}
}
孩子:
export class ChildComponent {
@Input() data: string;
writeToConsole(){
console.log(this.data);
}
}
问题是:第一次单击按钮时,我希望在控制台中看到“我想在控制台中显示此信息”,而不是收到“什么都没有”然而”。但是如果我再次点击它,就会达到预期的结果。我想父级将数据传递给子级之间存在延迟,因为如果我使用 setTimeout 稍等一下,一切正常。
我的问题:
- 从父级向子级发送数据并在子级中直接使用的最佳方式是什么?
- 我做错了什么?
非常感谢您的帮助,谢谢
【问题讨论】:
-
它适用于我的 Chrome。见this stackblitz。
-
@ConnorsFan ,请您参加控制台吗?第一次点击按钮出现“Nothing yet”.....第二次不同
-
你是对的。如果您在设置值后调用
ChangeDetectorRef.detectChanges(),则它可以工作。见the stackblitz。 -
@ConnorsFan 感谢您的快速回复。但是使用 detectChanges 不会对性能不利吗?
-
另一种方法是在按钮事件处理程序中调用的子组件方法中设置值。
标签: angular components interaction viewchild inputbinding