订阅Angular

时间:2017-03-29 09:24:44

标签: angular typescript

我有一个用于身份验证的私有方法。然后我有另一种方法(公共),我在我的组件中调用login来进行实际登录。我希望能够订阅实际订阅私有login方法的authentication方法,以便我可以在登录时显示加载和其他消息,对每个视图执行不同的操作。有可能吗?

身份验证方法:

private userAuthenticate( email: string, password: string ) {
    return this.httpPost(`${this.baseApiUrl}/auth?format=json&provider=login`, {userName: email, password: password}).subscribe(
        res     => this.saveJwt(res.bearerToken),
        err     => this.logError(err),
        ()      => console.log("Authentication done.")
    );
}

登录方式:

login( email: string, password: string ) {
    this.logout();
    return this.userAuthenticate(email, password);
}

我想订阅登录方法,以便我可以控制我的加载器和错误消息等。 请帮忙。

1 个答案:

答案 0 :(得分:3)

您无法订阅Subscription(由subscribe()返回),您只能订阅Observable

Observable使用map()代替subscribe()login()的来电者可以进行订阅

private userAuthenticate( email: string, password: string ) {
    return this.httpPost(`${this.baseApiUrl}/auth?format=json&provider=login`, {userName: email, password: password}).map(
        res     => this.saveJwt(res.bearerToken),
    );

对于其他callabacks,如果你真的需要它们,你可以使用catchfinally运算符。