Observables如何在Angular 2中工作

时间:2017-01-30 13:16:45

标签: angular

我试图围绕Angular 2中的observable如何工作而不是仅仅将它们用作模式。如果我创建一个像下面这样的基本observable,我可以在源变量上调用subscribe方法,该方法由于创建observable并将其分配给源变量而存在。

let numbers = [19, 38, 57];
let source = Observable.from(numbers);

source.subscribe(
  value => console.log(`value: ${value}`),
  error => console.log(`error: ${error}`),
  () => console.log('complete')
);

在Angular 2中,我有以下代码:

组件:

private getDevicesByUserId(): void {
  this.devicesHttp.getDevicesByUserId(this.userID)
    .subscribe(
      data => {
        this.devices = data;
      },
      error => {},
      () => {}
    );
}

HTTP服务:

public getDevicesByUserId(userID: number): Observable<any> {
  return this.http.get(this.url + 'api/device/user/' + userID, {
    headers: this.httpHeaders.getHeaders()
  })
  .map((response) => this.handleData(response))
  .catch((error) => this.handleError(error));
}

在上面的模式中,我在getDevicesByUserId函数上调用subscribe方法,但在http中没有创建可观察的观察。也许我错过了一些东西,但它只是一个返回http调用结果的函数。我怎么能在这样的常规函数​​上调用subscribe方法?如果我没有创建一个observable,该函数如何具有此属性?

1 个答案:

答案 0 :(得分:0)

getpost的Angular 2 Http service函数被内置以返回一个返回响应的冷Observable。

您不必显式创建Observable。如果您愿意,可以浏览http代码here

作为冷可观察对象,请求本身在观察者订阅时发送。 有关hot and cold observable here的更多信息 您自己服务中的getDevicesByUserId将返回您最终在组件中订阅的相同observable。

希望这可以解决它。