在Angular 6中,如果Observable订阅不起作用,可能有以下几个原因和解决方法:
import { Observable } from 'rxjs/Observable';
import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs/Observable';
@Component({
selector: 'app-example',
template: '...',
})
export class ExampleComponent implements OnInit {
ngOnInit() {
this.myObservable.subscribe(
data => console.log(data),
error => console.error(error),
() => console.log('Observable completed')
);
}
myObservable: Observable;
}
import { Observable, of } from 'rxjs';
this.myObservable = of('data');
import { Observable, from } from 'rxjs';
this.myObservable = from(['data1', 'data2']);
检查订阅代码的正确性:确保订阅代码没有语法错误,并且订阅的Observable对象返回了数据。可以在订阅代码中添加日志输出,以便检查是否有错误发生。
检查订阅对象是否被销毁:如果订阅的Observable对象在组件销毁前没有被取消订阅,可能会导致内存泄漏。在组件的ngOnDestroy生命周期钩子函数中,应该取消对Observable对象的订阅。示例代码如下:
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { Subscription } from 'rxjs/Subscription';
@Component({
selector: 'app-example',
template: '...',
})
export class ExampleComponent implements OnInit, OnDestroy {
private subscription: Subscription;
ngOnInit() {
this.subscription = this.myObservable.subscribe(
data => console.log(data),
error => console.error(error),
() => console.log('Observable completed')
);
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
myObservable: Observable;
}
通过检查以上几个原因,通常能够解决Observable订阅不起作用的问题。如果仍然无法解决,可以进一步检查其他可能的错误。