【发布时间】:2021-09-14 11:31:24
【问题描述】:
我的app.component 有一个对象列表
class Hero {
alias: string;
constructor(public firstName: string,
public lastName: string) {
}
}
class AppComponent {
...
heroes: Hero[] = [
new Hero("foo", "bar")
];
...
onHeroChange($event: Hero, index: number): void {
this.heroes[index] = $event;
}
<div *ngFor="let hero of heroes; let index=index">
<hero [hero]="hero" (heroChange)="onHeroChange($event, index)"></hero>
</div>
HeroComponent 是
export class HeroComponent {
@Input()
set hero(newValue: Hero) {
this._hero = newValue;
this.showAlias = !!newValue.alias;
}
get hero(): Hero {
return this._hero;
}
@Output() heroChange: EventEmitter<Hero> = new EventEmitter<Hero>();
showAlias: boolean = !1;
private _hero: Hero;
//
@HostListener('click')
onHeroClick(): void {
this.hero.alias = `alias_${+new Date()}`;
console.info('HERO TO EMIT', this.hero);
this.heroChange.emit(this.hero);
}
}
我的问题是,即使在app.component 中分配更改后的英雄,hero.component 内的set hero 也不会被调用,因此示例中的showAlias 没有更新,我在hero.component.
我需要通过分配整个数组来强制 ngFor 吗?
也许一种解决方法是从数组中删除对象然后再次插入? 不过听起来像是无用的计算。
注意:这只是一个例子,这不是我真正在做的事情,所以像
更新 onHeroClick 方法中的 showAlias 属性
或
在 hero.component 中分配英雄
很遗憾没有解决问题。我需要在外部进行更改,因为会发生其他事情。
是否可以将检测更改为onPush 并手动标记以供检查?
【问题讨论】:
标签: arrays angular typescript ngfor ngonchanges