这个问题通常是由于Observable没有正确订阅引起的。在订阅前,必须使用map或catchError等操作符对Observable进行转换。以下是一个示例:
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Injectable()
export class MyService {
constructor(private http: Http) { }
getSomething(): Observable {
return this.http.get('http://example.com/something')
.map((response: Response) => {
// your code inside subscribe() should be here
return response.json();
});
}
}
在以上代码中,使用了map
操作符来转换Observable。这样,当getSomething()
函数被调用时,Observable会从http请求获取数据,并将其转换为JSON格式。在map
操作符内部,我们可以将验证、提取、转换或其他逻辑添加到Observable。
请确保服务从Angular的Http
库中进行导入。在提供程序上使用@Injectable()
装饰器。
最后,在你的组件或其他地方,你可以像这样调用新的服务方法:
import { Component } from '@angular/core';
import { MyService } from './my.service';
@Component({
selector: 'my-component',
template: '...',
providers: [ MyService ]
})
export class MyComponent {
constructor(private myService: MyService) { }
getData() {
this.myService.getSomething().subscribe(
data => {
// your code here
},
error => {
// error handling
}
);
}
}