我有一个将user
数据传递给子组件的父页面,如下所示:
<ng-container *ngIf="leaderboard">
<app-leaderboard-preview [user]="user" (click)="goToLeaderboard()"></app-leaderboard-preview>
</ng-container>
父页面ngOnInit()
订阅了一个 observable,它返回一个用户对象并设置user
变量(我从 中删除了其他不相关的查询combineLatest
):
combineLatest([this.userQuery$]).subscribe((results) => {
Promise.all([this.parseUser(results[4])])
})
据我了解,ngOnChanges()
除非创建新对象,否则不会触发,因此我将新用户对象分配为新对象以app-leaderboard-preview
使用传递给组件Object.assign()
parseUser(user) {
return new Promise((resolve) => {
if(user) {
this.user = Object.assign({}, user);
resolve(user);
} else {
resolve(user);
}
})
}
这样加载组件,就好了,但是用户的排名是可以改变的,所以当用户向下滑动刷新页面的时候,值应该会更新,但是组件没有更新。我使用下面的代码(几乎是上面的副本)来刷新页面(没有硬重新加载)。
doRefresh(event) {
if (this.user) {
//user
this.userQuery$ = this.db.query$(`user/find?id=${this.user.id}`);
combineLatest([this.userQuery$]).subscribe((results) => {
Promise.all([this.parseUser(results[4])])
})
}
然后运行该parseUser
方法来更新使用的user
对象app-leaderboard-preview
。
所以这应该触发 ngOnChanges,因为我正在向组件传递一个“新”对象。我错过了什么?