【发布时间】:2022-01-18 20:22:42
【问题描述】:
我对我的应用程序的某个部分发生的事情感到困惑。我有一个使用 ngOnChanges 的组件。当组件加载时,ngOnchanges 在 ngOnInit 之前触发。 ngOnChanges 和 ngOnInit 都调用某个方法(fetchResults),该方法调用 api 服务以使用可观察的返回来获取一些数据。我在调用服务时有一个tap,用于控制台记录返回的数据,并且在 vs 中为被调用的 api 方法设置了一个断点。
当从ngOnChanges 钩子对fetchResults 进行初始调用时,服务不返回任何数据并且不命中api 断点。但是,当ngOnInit钩子被触发,fetchResults被第二次调用时,api断点被命中,控制台日志显示返回的数据。
为什么会这样?我期待任何对fetchResults 的调用都可以访问 api 并返回数据。我已经验证了所需的参数正在被传递。来自ngOnChanges 的调用和来自ngOnInit 的调用是相同的。
示例代码:
ngOnInit() {
console.log('fetchResults called from ngOnInit')
this.fetchResults(this.itemId);
}
ngOnChanges(changes: SimpleChanges) {
console.log('ngOnChanges called with changes value: ', changes)
this.fetchResults(changes['propName'].currentValue)
}
fetchResults(itemId){
console.log('fetchResults function called with competitionId: ', itemId)
this.resultList$ = this.dataservice.getResults(itemId)
.pipe(
map( result => {
return result.map(
item => {
return item;
}
)
}),
tap(val => console.log(' fetchResults function - the value of returned result object: ', val))
)
}
带有异步绑定的结果组件 Html:
... this.resultList$ | async" ...
【问题讨论】:
标签: angular ngoninit ngonchanges