Data binding Ionic2视图没有';不能与可观察的事物绑定
我有下面的组件类,它从服务接收一个可观察的组件。我希望我的组件在销毁时取消订阅。这是代码正在运行且视图得到更新(视图根据使用*ngIf的state值呈现不同的内容): 以及视图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
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;
}
}