2017-11-07 22 views
2

サインアップ後、サインアップコンポーネントからチャレンジコンポーネントにリダイレクトします。ローカルストレージがチャレンジコンポーネントに設定されていない場合は、サインアップコンポーネントにリダイレクトされます。私の問題は、初回サインアップのためサインアップからチャレンジコンポーネントにナビゲートしないことです。角型ルータはコンポーネント間で初めて移動しません

challange.component.ts

ngOnInit() { 
    if(localStorage.getItem('userId') != null) { 
    ...... 
    } 
    else{ 
     this.router.navigate(['/signup']); 
    } 

    } 

signup.component.ts

signupNew() { 
    this.signupService.doSignup(this.parameter); 
    this.router.navigate(['/challange']); 
} 

signup.service.ts

doSignup(signParam : SignupParam) { 
    this.signupCollection.add(signParam).then(ref => { 
     localStorage.setItem('userId', ref.id); 
     console.log(localStorage.getItem('userId')) 
    }).catch(err => { 
     console.log('Check your Internet connection...'); 
    }) 
    } 

route.ts

export const appRoutes : Routes = [ 
    { path : 'signup', component : SignupComponent }, 
    { path : 'challange', component: ChallangeComponent}, 
    { path : 'feed', component: NewsFeedComponent}, 
    { path : 'items-initial', component: InitialItemComponent}, 
    { path: '', redirectTo: '/', pathMatch : 'full'} 
]; 
+0

あなたのロット設定を表示できますか? – wdanda

+0

そして何かエラーが出ますか? router.navigateコードが呼び出されていることを確認するコードをデバッグしましたか? – wdanda

+0

チャレンジメニューをクリックすると、サインアップに直接リダイレクトされます。登録後、リダイレクトされません。それから私は再びサインアップしてリダイレクトします。だから私は2つのサインアップに直面する。エラーは発生していません – Rijo

答えて

2

私はあなたの問題はここにあると思う:

this.signupService.doSignup(this.parameter); 
this.router.navigate(['/challange']); 

doSignupが非同期であり、あなたはそれを同期していないので、ルータはuserId/challangeにナビゲートしているが、他につながるローカルストレージに設定されているが、初めてのリダイレクト。ただし、その時点でuserIdはlocalStorageになります。これらの通話を同期させてください:

async doSignup(signParam : SignupParam) { 
    // error handling omitted 
    const ref = await this.signupCollection.add(signParam); 
    localStorage.setItem('userId', ref.id); 
} 

async signupNew() { 
    await this.signupService.doSignup(this.parameter); 
    this.router.navigate(['/challange']); 
} 
+0

私は確認して更新します。あなたの返信をありがとう – Rijo

+0

もう1つサービスファイルからリダイレクトできますか? – Rijo

+1

@Rijoあなたはサービスからリダイレクトすることができます。なぜなら、「ルータ」をサービスに注入することができるからです。しかし、私は個人的にはルーティング機能が登録機能に強く結びついているため、この特定のルーティングなしでユーザーを追加する場合は、柔軟性があります。心に留めておくだけのもの。 –

関連する問題