Я изучаю Angular 6, я думал, что все делал правильно, но я сталкиваюсь с «проблемой-сомнением»
У меня есть родитель и ребенок:
- Мой родитель делится информацией с моим ребенком, используя привязку ввода
- Кнопка запускает функцию, в которой обновляется информация
- Немедленно родитель вызывает дочернюю функцию через @ ViewChild
A 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 для небольшого удержания, все работает нормально.
Мои вопросы:
- Каков наилучший способ отправки данных от родителя к ребенку и немедленного их использования у ребенка?
- Что я делаю не так?
Действительно признателен за вашу помощь, спасибо