2017-10-23 15 views
1

現在ログインしているユーザーをロードする場所にApp.vueコンポーネントがあります。私はまた、ユーザーがログインルートへのアクセスを試みるときにユーザーをリダイレクトしたいし、現在ログインしているユーザーがすでにコンテキストに保存されている(彼はすでにサインインしている)。vuejsコンポーネントが最初にデータを読み込むのを待ちます

// inside App.vue component 
created() { 
    AuthService.getCurrentUser().then((user) => { 
    this.user = user; 
    }); 
} 

私はあるCurrentUserがsettedであるかどうかのログイン・コンポーネントのcreated方法でチェックを持っていますが、ユーザーがログインページに移動しようとしたとき、それは、現在のユーザーの要求ということができるかもしれません終了していません。

私の質問は:

データがApp.vueコンポーネントのロード前にロードするために、私は待ってはどうすればよいですか? 私はこのような何かを見た:実際にとにかくロードするデータとコンポーネントのロードを待ちません

waitForData: true, 
data(transition) { 
    return AuthService.getCurrentUser().then(currentUser => { 
    transition.next({ currentUser }); 
    }); 
} 

を。

編集:私はbeforeRouteEnterの承知しているが、これは親のすべてのコンポーネントの構成要素ではなく、ルートの特定成分であるApp.vueコンポーネントです。ユーザーが現在のパスをチェックするApp.vueコンポーネントにloaedとしたとき、私は考えることができるhttps://router.vuejs.org/en/advanced/data-fetching.html

答えて

0

使用VUE-ルータは、データの非同期をロードするためにbeforeRouteEnterガードを使用することができますリダイレクトする場合は\loginです。このような

何か:

created() { 
    AuthService.getCurrentUser() 
    .then(user => this.setCurrentUser(user)) 
    .then(() => { 
    const { path } = this.$router.currentRoute; 
    if (path === '/login') { 
     this.$router.push('/'); 
    } 
    }); 
+0

はい、これは 'App.vue'コンポーネントですが、これはどのルートにも接続されていないため動作しません。少なくとも動作させることはできませんでした。 – Nikola

0

一つの方法は次のとおりです。それは、ここで説明していますliek

0

私は非常に同様の問題に遭遇し、ロードされたデータに依存して、子コンポーネントをラップ要素に V-場合を追加することで解決しました。そして、もちろんv-ifを制御するデータプロパティがあります。ラッピング要素を持たない場合は、ラップするのに常にtemplate要素を使用できます。

1

これは物事を行う方法ではありません。

  1. 使用VUEXあなたのCurrentUserにオブジェクトを格納するための
  2. App.vueの計算されたセクションでvuexゲッターを設定します。テンプレートは、データが準備できたら動的に更新されます。

地図を見るpageのゲッターセクションをご覧ください。これは、計算されたメカニズムで非常にうまく動作します。

関連するコンポーネントでv-ifを使用することもできます。これにより、データがVUEXで準備される前にコンポーネントが作成されなくなります。

関連する問題