Data binding Ionic2视图没有';不能与可观察的事物绑定

Data binding Ionic2视图没有';不能与可观察的事物绑定,data-binding,ionic2,components,observable,Data Binding,Ionic2,Components,Observable,我有下面的组件类,它从服务接收一个可观察的组件。我希望我的组件在销毁时取消订阅。这是代码正在运行且视图得到更新(视图根据使用*ngIf的state值呈现不同的内容): 以及视图my widget.component.html: <h2>My Widget</h2> <div *ngIf="state === myWidgetStateType.Enabled"> <p>Enabled</p> </div> <d

我有下面的组件类,它从服务接收一个可观察的组件。我希望我的组件在销毁时取消订阅。这是代码正在运行且视图得到更新(视图根据使用*ngIf的state值呈现不同的内容):

以及视图
my widget.component.html

<h2>My Widget</h2>
<div *ngIf="state === myWidgetStateType.Enabled">
    <p>Enabled</p>
</div>
<div *ngIf="state === myWidgetStateType.Dormant">
    <p>Dormant</p>
</div>
<div *ngIf="state === myWidgetStateType.Locked">
    <p>Locked</p>
</div>
我的小部件
启用

休眠的

锁定

但是,如果我尝试将订阅服务器中的调用提取到私有函数,console.log方法可以工作,但视图不会根据状态呈现任何内容(呈现了
标题,但没有
元素):

@组件({
templateUrl:'my widget.component.html',
选择器:“我的小部件”
})
导出类MyWidgetComponent实现OnInit、OnDestroy{
//要保持状态的枚举类型变量
状态:MyWidgetStateType;
//这是能够在模板中使用枚举类型所必需的
私有myWidgetStateType=myWidgetStateType;
//保留对可观察对象的引用以取消订阅
专用子用户:用户;
构造函数(公共myWidgetService:myWidgetService){
}
ngOnInit():void{
this.sub=Subscriber.create(this.onStateChange);
this.myWidgetService.getState().subscribe(this.sub);
}
ngOnDestroy():void{
//在这里退订
此.sub.取消订阅();
}
私有onStateChange(状态:MyWidgetStateType):void{
log('Widget state:'+MyWidgetStateType[state]);
this.state=状态;
}
}
问题是:为什么如果调用onStateChange函数,视图就永远不会得到更新值

当然,这并没有妨碍我的工作,因为我有上面的解决方案,但我只是好奇

export enum MyWidgetStateType {
    Enabled,
    Dormant,
    Locked
};
<h2>My Widget</h2>
<div *ngIf="state === myWidgetStateType.Enabled">
    <p>Enabled</p>
</div>
<div *ngIf="state === myWidgetStateType.Dormant">
    <p>Dormant</p>
</div>
<div *ngIf="state === myWidgetStateType.Locked">
    <p>Locked</p>
</div>
@Component({
    templateUrl: 'my-widget.component.html',
    selector: 'my-widget'
})
export class MyWidgetComponent implements OnInit, OnDestroy {
    // Enum type variable to keep state
    state: MyWidgetStateType;

    // This is needed to be able to use the enum type in the template
    private myWidgetStateType = MyWidgetStateType;
    // Keep a reference to the observable to unsubscribe from it
    private sub: Subscriber<any>;

    constructor(public myWidgetService: MyWidgetService) {
    }

    ngOnInit(): void {
        this.sub = Subscriber.create(this.onStateChange);
        this.myWidgetService.getState().subscribe(this.sub);
    }

    ngOnDestroy(): void {
        // Unsubscribe here
        this.sub.unsubscribe();
    }

    private onStateChange(state: MyWidgetStateType): void {
        console.log('Widget state: ' + MyWidgetStateType[state]);
        this.state = state;
    }
}