LINUX.ORG.RU

Angular 2 и модуль Http

 ,


0

0

Недавно начал знакомиться с Angular и REST. Вот слегка не могу разобраться.
Что мне нужно? Нужно при открытии приложение получить token с сервера и пока токен не загружен приложение не должно быть загружено тоже.
Итак что я имею.
1) Главный компонент:

export class AppComponent {
    public navItems = NAV_ITEMS;

    constructor(private elementRef: ElementRef, public sharedService: SharedService) {
        let clientId: string = elementRef.nativeElement.getAttribute('client-id');
        let clientSecret: string = elementRef.nativeElement.getAttribute('client-secret');
        let backend: string = elementRef.nativeElement.getAttribute('backend');
        let accessToken: string = elementRef.nativeElement.getAttribute('access-token');

        this.sharedService.requestToken(clientId, clientSecret, backend, accessToken);
    }
}
2) Сервис:
@Injectable()
export class SharedService {
    public token: any;
    private _authToken: string;

    constructor(private http: Http) {
    }

    public requestToken(clientId: string, clientSecret: string, backend: string, accessToken: string): void {
        let headers = new Headers();
        let params = new URLSearchParams();
        headers.append('Content-Type', 'application/x-www-form-urlencoded');
        params.append('grant_type', 'convert_token');
        params.append('client_id', clientId);
        params.append('client_secret', clientSecret);
        params.append('backend', backend);
        params.append('token', accessToken);

        this.http.post('/auth/convert-token/', params.toString(), {headers: headers})
            .map(response => response.json())
            .subscribe(data => {
                this.token = data;
                this.token.backend = backend;
            });
    }

    get authToken(): string {
        return this.token.token_type + ' ' + this.token.access_token;
    }
}
Как это реализовать то вообще? Да, я понимаю, что запрос ассинхронный и что в этом «проблема».
Помоги, ЛОР.

★★★★

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.