Как можно разрешить некоторые вещи/вызов ajax, прежде чем отображать мое представление в Angular 2?

Я уже пробовал это предложение, но оно не работает. У Observable нет метода fromPromise, и машинописный текст вызывает ошибку.

import {Observable} from "rxjs/Rx";
import {Http} from "@angular/http";
import {GLOBAL_CONST} from "../global-const";
import {Resolve, ActivatedRouteSnapshot, RouterStateSnapshot} from "@angular/router";

export class ResolverSignupBegin{//} implements Resolve<any>{

    signupBeginData:any[];

    constructor(private http:Http){}

    getData(){
        return this.http.get(GLOBAL_CONST.apiPath + "/user/login/api-logged-in")
            .map(res => res.json())
            .subscribe(
                (data) => { console.log("data", data); return data; },
                (err) => { console.log("error", err); }
            );
    }


    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):Observable<any>{
        return this.getData();
    }


}

У меня есть ошибка в «этом». GetData говорит, что «Ошибка: (28, 16) TS2322: тип« Подписка »не может быть назначен типу« Наблюдаемый ». Свойство« _isScalar »отсутствует в типе« Подписка »».


person Donovant    schedule 21.07.2016    source источник


Ответы (1)


Если вы подпишетесь, вы получите Subscription, но resolve нужно вернуть Observable.

Вместо того, чтобы подписываться на себя, верните наблюдаемое и позвольте Angular выполнить подписку.

getData(){
    return this.http.get(GLOBAL_CONST.apiPath + "/user/login/api-logged-in")
        .map(res => res.json())
        .catch((err) => { console.log("error", err); throw err;}
        .do(
            (data) => { console.log("data", data)},
        );
}

Не забывайте, что вам нужно импортировать такие операторы, как map и do. См. https://stackoverflow.com/questions/34515173/angular-2-http-get-with-typescript-error-http-get-map-is-not-a-function-in

person Günter Zöchbauer    schedule 21.07.2016