2017-08-03 31 views
0

すべてのアプリケーションと同様に、いくつかのルートがあります。例えば(router/index.js抜粋):vue.js:非同期値のルートガード待機

[{ 
    path: '/reporting', 
    name: 'Reporting', 
    component: reporting, 
    meta: { 
     adminOnly: true 
    } 
}, 
...] 

reportingにアクセスするには、ユーザがvuexストア内のプロパティである、管理者権限を持っている必要があるときあなたは、ルート定義に見ることができるように。問題:このプロパティは非同期であり、ガードで最初にアクセスするときはもちろん間違っています。私のガードはそれを待つことができますか?

ガード:

if (to.matched.some(route => route.meta.adminOnly)) { 
    if (store.getters.userInfo.isAdmin) { 
     next() 
    } else { 
     next('/') 
    } 
} else { 
    next() 
} 
+0

どのようにこのプロパティを取得しますか? – Cobaltway

+0

これはinitのvuexストアで行われます。 – sandrooco

+0

ログイン操作が解決される前にアプリを起動しないでください。行動が約束を返すとき、あなたは容易になるはずです。 –

答えて

1

store.watchを使用して、ゲッターを見てどうですか?

データがまだフェッチされない場合は、ゲッターがnullを返すと仮定します。

+0

'' [vuex] store.watchは関数を受け付けるだけです... '' ...? – sandrooco

+0

私はそれを把握することができました。ゲッタが実際の関数を返すことが重要です。ゲッター自体は十分ではありません。 'someGetter(状態){ 復帰機能(){ リターンstate.xx }}' – sandrooco

+0

)は(store.getters.userInfo.isAdmin場合)、次の 'の繰り返しコードを' '回避するパターンがあります。 else next( '/'); '' '?あなたはどうしますか? –