以angular2

时间:2017-01-22 11:03:55

标签: angular typescript

我对angular2很新,我想访问一个承诺的结果但是失败了

这就是我试过的

在authservice

token: string ;

 constructor( private _http: Http, private _storage: Storage) {

    this._storage.get('currentUser')
      .then(res=> this.token = JSON.parse(res).token)

       //WHEN I SET AN ARBITRARY VALUE IT RETURNS
          eg:this.token="dsd";

       //Also this logs a value
      // .then(res=> console.log(JSON.parse(res).token))

   }

在另一个组件中,我通过

访问令牌
authtoken: string;
constructor( private _authservice: AuthService, public _loadingCtrl: LoadingController) {
this.authtoken = this._authservice.token;
  }

  in the view
{{authtoken}}

我在想什么

2 个答案:

答案 0 :(得分:1)

在服务中试试这个:

getToken() {
  return JSON.parse(this._storage.get('currentUser')).token;
}

然后在你的组件中:

this.authtoken = this._authservice.getToken();

如果存在异步问题,可能值得在视图中添加elvis-operator:

{{authtoken?}}

答案 1 :(得分:1)

当asynchronus函数调用完成时,您的第二个组件不知道。因此,您将获得null或未定义的值作为返回值。

我会建议这样的事情:

token: string ;

constructor( private _http: Http, private _storage: Storage) {

}

setCurrentUser(): Promise<void>{
    if (this.token == undefined ||this.token == ""){ //Only sets the token if no user is signed in
        return this._storage.get('currentUser').then(res=> this.token = JSON.parse(res).token)
   } 

   return Promise.resolve();
   //WHEN I SET AN ARBITRARY VALUE IT RETURNS
      eg:this.token="dsd";

   //Also this logs a value
  // .then(res=> console.log(JSON.parse(res).token))
}

在你的其他组成部分中:

authtoken: string;
constructor( private _authservice: AuthService, public _loadingCtrl: LoadingController) {

}

ngOnInit(){
    this._authservice.setCurrentUser().then(() => {
        this.authtoken = this._authservice.token;
    }
}

  in the view
{{authtoken}}