我有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
,set hero
内部hero.component
也不会被调用,因此showAlias
在示例中没有更新,我在hero.component
.
我是否需要通过分配整个数组来强制 ngFor?
也许解决方法可能是从数组中删除对象然后再次插入?听起来像无用的计算。
注意:这只是一个例子,这不是我真正在做的事情,所以像
更新 onHeroClick 方法中的 showAlias 属性
或者
在 hero.component 中分配 hero
不幸的是,没有解决问题。我需要在外部进行更改,因为会发生其他事情。
是否可以将检测更改onPush
为手动检查并标记为另一种选择?