У меня есть родительская страница, которая передает данные user
в дочерний компонент, например:
<ng-container *ngIf="leaderboard">
<app-leaderboard-preview [user]="user" (click)="goToLeaderboard()"></app-leaderboard-preview>
</ng-container>
Родительская страница ngOnInit()
подписывается на наблюдаемое, которое возвращает объект пользователя и устанавливает переменную 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, потому что я передаю «новый» объект компоненту. Чего мне не хватает?