Angular 2+从http请求返回变量或映射

时间:2017-09-28 18:25:34

标签: javascript angular rest typescript

我有一个服务,它可以存储一个对象,以便我可以在其他组件中访问它或从web api请求数据并将其返回到地图中。

objectService的示例获取

pipeline {
    agent any
    options { skipDefaultCheckout() }
    stages{
        stage('first stage') {
            steps {
                checkout scm   
            }
        }
    }
}

使用该服务设置页面标题

get(): any {
    if (this.object == undefined || this.object == null) {
        return this.http.get(this.baseUrl + "/companies/get)
            .map((data: any) => {
                this.object = data;
                return this.object;
            });
    } else {
        return this.object;
    }
}

所以这在我第一次加载页面时有效,但是在没有重新加载的情况下导航到页面时,我收到以下错误ngOnInit() { this.objectService.get().subscribe((data: any) => { this.title.setTitle(data.name); }); } 。这是有道理的,因为我返回一个对象而不是一个http请求。

所以我试图只返回对象,而不是http请求。

objectService的示例获取

...subscribe is not a function

使用该服务设置页面标题

get(): any {
    if (this.object == undefined || this.object == null) {
        return this.http.get(this.baseUrl + "/companies/get)
            .map((data: any) => {
                this.object = data;
            });
    }
    return this.object;
}

这现在翻了一个问题,页面刷新给我一个错误,说明.objectService.get()。name是未定义的,当我导航到没有页面刷新的组件时,它可以正常工作。

任何有关试图让这个工作的帮助将不胜感激。提前谢谢!

1 个答案:

答案 0 :(得分:1)

实际上你正在混合可观察对象和普通对象!

我会说坚持第一个方法,但在返回对象时,将其转换为可观察对象,以便它可以在onNgInit

中使用

所以你的服务将

get(): Observable<any> {
    if (this.object == undefined || this.object == null) {
        return this.http.get(this.baseUrl + "/companies/get)
            .map((data: any) => {
                this.object = data;
                return this.object;
            });
    } else {
        return Observable.of(this.object);
    }
}

你的消费仍然是正常的,并适用于两种情况。

ngOnInit() {
    this.objectService.get().subscribe(
      (data: any) => {  // this for response data
        this.title.setTitle(data.name);
      },
      (error: any) => {  // this for error
        console.log('error: %o', error);
      },
   );
}