我一直在这里和其他地方寻找解决方案几个小时,我简直不敢相信我找不到一个。所以无论如何。我有一个简单的Angular组件(在Ionic 3中使用它):
class Item {
name = 'New item';
}
@Component({
selector: 'edit-item',
template: `<input [(ngModel)]='newItem.name' /><button (click)='save()'>Save</button>`
})
export class EditItem {
newItem = new Item();
constructor(private cd: ChangeDetectorRef) {
}
save() {
this.newItem = new Item();
}
}
当我在输入字段中输入文本时,它会正确更改item.name
。现在,当我单击“保存”时,输入字段将继续显示我输入的文本。当我创建一个新项目时,我宁愿让它显示“新项目”。
我知道角度变化检测不会深度比较对象。所以我试图将save
函数更改为:
save() {
this.cd.detectChanges();
}
我还尝试将组件的changeDetection
更改为ChangeDetectionStrategy.OnPush
,并在项目名称发生更改时实施自定义ngOnChanges
以解除cd.markForChanges()
。
我对这些方法都没有成功。你能帮我找到解决这个问题的正确方法吗?