让我们说我必须关注实体
export class Photo {
public data: Blob;
public User: string;
}
以下组件
@Component({
template: '<my-other-component [(ngModel)]="photo.data"></my-other-component>'
})
export class MyComponent {
@Input()
photo: Photo;
constructor(private photoService: PhotoService, private cd: ChangeDetectorRef){}
public deletePhoto(): void {
this.photoService.deletePhoto(this.photo)
.subscribe((result: ApiResult) => {
//if done here, change detection doesn't work
this.photo = new Photo();
});
//if done here, change detection works
this.photo = new Photo();
}
}
PhotoService是一个发出http删除请求的服务。
my-other-component
实施ControlValueAccessor
每当我在my-other-component
方法中更改绑定到子组件subscribe
的对象时,都不会传播任何更改。
如果我在我的subscribe
方法之外调用它,则会有效,my-other-component
会收到有关更改的通知。
如果我将photo
设置为NULL
或新实例或只更改属性data
,则无关紧要。
我认为这种行为是设计的,但我想知道为什么以及如何以及是否可以使其发挥作用。或者也许我在完全错误的轨道上。
我已经使用ChangeDetectorRef
和markForCheck
有什么想法吗?
修改
一如既往 ;)
发布后不久,我找到了解决方案。
使用ChangeDetectorRef
但不使用方法markForCheck
。正确是detectChanges
变化不会传播,但问题仍然存在。
为什么我必须在observable中手动触发变更检测?