2017-12-21 2 views
0

나는 IONIC의 초보자입니다. 내가 typescript 클래스에 대한 약속 값을 사용할 수 없다는 간단한 문제가 하나 있습니다. 그것은 객체를 반환하지만 값이 필요합니다. 그렇지 않으면 내 조건 중 하나가 충족되지 않습니다. 누구든지 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); 
    } 

} 

내가이

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

아래로 내 토큰 약속을 해결 그리고로 하나 개의 조건을 만들려고 내 app.component.ts입니다 app.component.ts ngOnInit()

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

불행히도 여기 조건이 작동하지 않습니다. 내 토큰이 null인지 null인지 여부 여기서 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에서 변경됩니다. 토큰이 null이 아니면 내 nav footer from rootPage = TabsPage to this.rootPage = HomeTabspage.So 만약 사용자가 login을한다면 토큰 로직에 따라'this.rootPage = HomeTabsPage'가 변경 될 것입니다. 내 'Singin()'메소드에서 HomeTabsPage를 밀고있다. 이것은 Signin() 메소드'this.navCtrl.setRoot (HomeTabsPage)'의 마지막 부분입니다. 이것을 바꾸려면'window.location.reload()'를 써야합니다. – Garten786