2017-12-21 25 views
0

私はIONICの初心者です。私は、私のtypescriptクラスに約束の値を使用できないという単純な問題が1つあります。それはオブジェクトを返すが、私は値が必要です。さもなければ、私の条件の一つが成就しません。どのようにtypescriptクラスにこの約束の値を使用することができます誰も私を導くことができますか?コードIonic3約束の値を取得

import { TabsPage } from '../pages/tabs/tabs'; 
import {SocialActivitiesPage} from '../pages/social-activities/social-activities'; 
import { HomeTabsPage } from '../pages/home-tabs/home-tabs'; 
export class MyApp implements OnInit { 
    rootPage:any = TabsPage; 
    socialProfile:any = SocialActivitiesPage; 
    hometabs:any = HomeTabsPage; 

@ViewChild('nav') nav:NavController; 

    constructor(platform: Platform, 
     statusBar: StatusBar, 
     splashScreen: SplashScreen, 
     public menuCtr:MenuController, 
     private storage: Storage,) { 

    } 
    token:Promise<any> = this.storage.get('token').then((val)=>{ 
    return this.token = val; 
    }).catch(
    (err)=>{ 
     console.log(err); 
    } 
) 

    ngOnInit(){ 
    if(this.token!==null){ 
     this.rootPage = HomeTabsPage; 
    } 
    } 
    ionViewDidLoad(){ 
    console.log(this.token); 
    } 

} 

コードの上

app.component.tsは私が

この下の
token:Promise<any> = this.storage.get('token').then((val)=>{ 
    return this.token = val; 
    }).catch(
    (err)=>{ 
     console.log(err); 
    } 
) 

で私のトークンの約束を解決さに一つの条件を作ってみました私のapp.component.tsですngOnInit()

ngOnInit(){ 
    if(this.token!==null){ 
     this.rootPage = HomeTabsPage; 
    } 
    } 

残念ながらここではこの状態は機能しません。自分のトークンがヌルであるかヌルでないか。ここでthis.tokenはオブジェクトであり、値ではありません。しかし、app.htmlからこのトークンを呼び出すと、オブジェクトではなく文字列値として返されます。私はこのようにapp.htmlにこのトークンを呼び出そうとしました。

{{token}} 

これは文字列の値を示しています。残念ながら、typeScriptクラスからは、常に_zoneSymboleType_zoneSymboleValueのオブジェクトを表示しています。ここでは_zoneSymboleValueに私の価値を見ることができます。だから私の質問どのように私は値としてthis.tokenを使用することができますか、私のtypeScript条件にオブジェクトとしてではありません。
あなたの努力を高く評価します。
おかげ

+0

「トークン」に入っているデータを取得したいのですか、それとも確認だけしていますか? –

+0

ここでトークンを設定しますか? –

答えて

1

これは、応答が到着するのは時間がかかるので、あなたの代わりにあなたのOnInitでその関数を呼び出すことによってこの問題を解決することができ、非同期です:

ngOnInit() { 
    this.storage.get('token').then((val)=>{ 
    if(val!==null){ 
     this.rootPage = HomeTabsPage; 
    } 
    }) 
} 

は非同期について詳しく読む:How do I return the response from an Observable/http/async call in angular2?

+0

あなたは素晴らしい人です!魅力のように働く。この機能は、アプリケーション全体をリフレッシュした後に機能します。それ以外の場合は、前の状態になります。 ionViewDidLoad()またはwindows.location.reload()を使用する必要があります。そして、windows.location.reload()関数がモバイルで動作しないと聞きました。だからこそ最適な解決策は何でしょうか? @ AJT_82 – Garten786

+0

ここで少し苦労しています。あなたはリフレッシュするときに何が起こりたいですか? :)あなたはリフレッシュしたいという意味ですか? :) – Alex

+0

本当に申し訳ありません、 'this.rootPage = HomeTabsPage'が私のapp.html' ' から変更されています。 nav footer from rootPage = TabsPage to this.rootPage = HomeTabspage.Soもし私のユーザがログインすれば、 'this.rootPage = HomeTabsPage'はトークンロジックに従って変更されます。 HomeTabsPageを私の 'Singin()'メソッドから呼び出そうとしています。これは私のSignin()メソッド 'this.navCtrl.setRoot(HomeTabsPage)'の最後の部分です。これを変更するには、 'window.location.reload()'と書く必要があります。 – Garten786

関連する問題