Angular BehaviorSubject;«следующий» метод не работает - PullRequest
0 голосов
/ 01 мая 2019

У меня есть код, который я написал в Angular 4, и он отлично работал, теперь его часть сломана в Angular 6, и я ценю некоторую помощь.

У меня есть класс AuthService:

export class AuthService {

    private loggedIn = new BehaviorSubject<boolean>(false);

    isUserLoggedIn(): Observable<boolean> {
        return this.loggedIn.asObservable();
    }

    isUserLoggedIn(): Observable<boolean> {
        return this.loggedIn.asObservable();
    }

    login(username: string, password: string) {
        let body =
        {
            username: username,
            password: password
        };

        return this._http.post(Settings.apiEndpoint + "users/authenticate", body)
            .map(res => {
                localStorage.setItem('token', res["token"]);
                localStorage.setItem('username', res["username"]);
                this.isLoggedIn = true;
                this.loggedIn.next(true);
                return res;
            })
            .catch(error => {
                this.clearAuthData();
                return Observable.throw(error)
            });
    }

    logout() {
        localStorage.clear();
        this.isLoggedIn = false;
        this.loggedIn.next(this.isLoggedIn);
    }
}

и в моем AppComponent я подписываюсь на эту тему следующим образом:когда я вхожу, это не так.Насколько я могу судить по тому, что было в Angular 4, код не тронут, поэтому я не могу понять, почему он не запускается.

1 Ответ

1 голос
/ 01 мая 2019

Ваш код не работает из-за критического изменения rxjs 6, в версии 5.5 введены конвейерные операторы

Раньше:

source.map(x => x * 2).catch(() => of('ups'))

Сейчас:

source.pipe(map(x => x * 2), catchError(() => of('ups')))

такжеони переместили catch () в catchError (), do () в tap (), switch () в switchAll () и finally () в finalize ()

[Edit], не забудьте импортировать ваши rxjsтакие операторы: import {map} из 'rxjs / operator';

...