2017-02-12 7 views
-1

ストレージの値をionicに設定しています。しかし、私はそれを取得することができません。Ionic2 - ストレージの値の設定と取得に失敗する

これは私が私のログインサービス私はコンストラクタで値を取得しようとした私は

this._storage.get('token') 
    .then(res=>{ 
     console.log("in the other area token is"+res)//this is null 

    } 
); 

を試した他のサービスでも

@Injectable() 
export class Authservice { 
    storage: Storage; 

    login(user: UserModel): Observable<any> { 
    return this._http.post(this.loginurl + "mobile-login", body) 
    .map((response: Response) => { 
    let token = response.json().access_token; 
    if (token) { 
     console.log(token) //this returns a value of the token 
     this.storage.set('token', token); 

     this.storage.get('token').then((val) => { 
     console.log("token value now is"+val); //this returns nothing 
     }) 
    } else { 
     // return false to indicate failed login 
     return false; 
    } 
    }) 
    //.catch(this.handleError); 
} 

をやっていることですこのように

authtoken:string; 

    constructor(private http: Http, private _storage:Storage) { 
this._storage.get('token') 
    .then(res=>{ 
     this.authtoken= res; 

    } 
); 
    } 

は、その後、私は私のアプリモジュールで

console.log(this.authtoken) //still nothing 

を試してみたコンポーネントに私はまた、問題になる可能性は何

providers[Storage] 

を追加しました。私はクロムブラウザでテストしています。

答えて

1

storage.setが約束を返すため、これは同期プロセスではありません。

したがって、storage.getをすぐに呼び出すと、トークンはまだ完全にストレージに保存されておらず、何も取得されません。

パブリックイベントは、ストレージセットが正常に作成されたときに作成できます。他のコンポーネントで

import { BehaviourSubject, Subject } from 'rxjs'; 

tokenEvent: Subject = new BehaviourSubject(null); 

... 

this.storage.set('token', token).then(res => this.tokenEvent.next(true)); 

constructor(private auth: Authservice){} 
ngOnInit() { 
    this.auth.tokenEvent.subscribe(res => { 
    if (res) { 
     this.this.storage.get('token') 
     .then(token => console.log(token)); 
    } 
    }) 
} 

APIドキュメント:https://ionicframework.com/docs/v2/storage/

+0

は、だからあなたはtokeneventは、すべてのサービスやコンポーネントが利用できるようになることを意味するのですか? –

+0

複数のモジュールがある場合、AuthServiceはSharedModuleに必要です。他のモジュールはこのSharedModuleをインポートします –

+0

何かAuthServiceに 'tokenEvent'をアクセスできるようにします –

関連する問題