Angular 2,在Observable

时间:2017-05-17 13:15:25

标签: angular observable angular2-changedetection

让我们说我必须关注实体

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,则无关紧要。

我认为这种行为是设计的,但我想知道为什么以及如何以及是否可以使其发挥作用。或者也许我在完全错误的轨道上。

我已经使用ChangeDetectorRefmarkForCheck

进行了尝试

有什么想法吗?

修改 一如既往 ;) 发布后不久,我找到了解决方案。 使用ChangeDetectorRef但不使用方法markForCheck。正确是detectChanges

变化不会传播,但问题仍然存在。

为什么我必须在observable中手动触发变更检测?

0 个答案:

没有答案