首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >离子4/角度应用中观测值的正确使用方法

离子4/角度应用中观测值的正确使用方法
EN

Stack Overflow用户
提问于 2020-05-11 11:02:27
回答 1查看 471关注 0票数 0

因此,有一个简单的应用程序创建的离子/角。

有包含用户电话的app.component.html (菜单):

代码语言:javascript
复制
<span *ngIf="phone">{{phone}}</span>

app.component.ts

代码语言:javascript
复制
public phone: string = ''

initializeApp() {
    this.platform.ready().then(() => {
        this.getUser()
    });
}

getUser() {
    if(this.auth.isLoggedIn) {
        this.auth.getUser()
            .subscribe(
                user => {
                    this.phone = user.phone
                }
            )
    }
}

AuthService

代码语言:javascript
复制
public isLoggedIn: boolean = false
public token: string = null


getUser(): Observable<User> {
        const headers = new HttpHeaders({
            'Content-Type': 'application/json',
            'Token': this.token
        })

        return this.http
            .get<User>(this.util.API_URL + '/user', { headers } )
            .pipe(
                map(
                    res => {
                        // api returns json response with 'result' object
                        return res['result']
                    }
                )
            )
    }

问题,我需要在应用程序启动时从app.component.ts调用getUser()方法。如果用户登录了,它现在就可以工作了。但是,当用户未登录时,我需要在成功的用户登录后调用getUser()方法。但我不能在initializeApp()之前从LoginComponent调用LoginComponent,例如。

那么,在AppComponent中显示用户数据的正确方法是什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-11 03:49:43

auth.service:

代码语言:javascript
复制
export class AuthService {
  private currentTokenSubject = new BehaviorSubject<string>(null); // <-- assign default value here

  constructor(
    private http: HttpClient,
    private storage: Storage,
  ) {
    this.getToken().then(
      res => {
        this.currentTokenSubject.next(res);               // <-- push token to the observable
      }
    );
  }

  async getToken() {
    return await this.storage.get('accessToken');
  }

  public get currentTokenValue(): Observable < string > {
    return this.currentTokenSubject.asObservable();        // <-- return observable here
  }

  login(username: string, password: string) {
    const headers = new HttpHeaders({
      'Content-Type': 'application/json',
      'Accept': 'application/json',
      'Authorization': 'Basic ' + btoa(username + ':' + unescape(encodeURIComponent(password)))
    })

    return this.http.post<Token>(`${environment.apiUrl}/auth/signin`, {}, { headers }).pipe(
      map((res: Token) => {
        let token = res.token;
        // store user details and jwt token in local storage to keep user logged in between page refreshes
        this.storage.set('accessToken', token);
        this.currentTokenSubject.next(token);              // <-- also push new token here?
        return token;
      }));
  }

  logout() {
    // remove user from local storage to log user out
    this.storage.remove('accessToken');
    this.currentTokenSubject.next(null);
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61728139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档