Компонент @ViewChild не определен при попытке вызвать асинхронную переменную

Я использовал компонент @ViewChildren:

@ViewChildren("MyTest2Component") public myTest2Component: QueryList<MyTest2Component>


public ngAfterViewInit() {

this.myTest2Component.changes.subscribe((comps: QueryList <MyTest2Component>) =>
{
    console.log(comps.first.data); // data is async, here is undefind
});

}

но при попытке вызвать асинхронную переменную data вернуть undefind

Что я могу сделать, чтобы решить эту проблему?


person Mahdi    schedule 28.10.2020    source источник
comment
Как выглядит ваш MyTest2Component?   -  person Marek W    schedule 28.10.2020
comment
мой MyTest2Component - это пакет, и я не могу его изменить.   -  person Mahdi    schedule 28.10.2020


Ответы (1)


В вашем дочернем компоненте вы можете определить событие для уведомления родителя об изменении данных, как показано ниже.

@Component({
  selector: 'parent-component',
  template: '<child-component (dataChanged)="onChildDataChanged($event)"></child-component>',
  styles: ['']
})
export class ParentComponent {
    onChildDataChanged(newData) {
        // tweak with new data
    }
}

@Component({
  selector: 'child-component',
  template: '<div></div>',
  styles: ['']
})
export class ChildComponent implements OnInit {
    @Output() dataChanged: EventEmitter<any> = new EventEmitter<any>();
    
    ngOnInit(): void {
        someAsyncOperation.subscribe(data => {
            this.dataChanged.emit(data);
        });
    }
}
person ilkengin    schedule 28.10.2020
comment
MyTest2Component - это пакет, и я не могу его изменить. - person Mahdi; 28.10.2020
comment
Это печально... Тогда единственный выход - периодически проверять, заполнены ли данные с помощью setInterval, и вы можете использовать clearInterval, чтобы прекратить проверку, когда у вас есть данные. Пример использования методов setInterval и clearInterval приведен здесь - person ilkengin; 28.10.2020