Voici mon garde de route :
router.beforeEach(async (to, from, next) => { await store.dispatch('GetPermission'); if (to.matched.some(record => record.meta.requireAuth)) { let permissions = store.state.permissions; //获取到的是空值 console.log(permissions); if (permissions.filter(per => (per.name === 'read_list').length != 0)) { next({ path: '/dashboard/create' }) } else { next() } } else { next() } });
Le problème est que même si j'ai utilisé wait dans la méthode de répartition, je n'ai pas obtenu la valeur de statut des autorisations qui était initialement vide Voici le code de la boutique vuex :
GetPermission(context) { axios.defaults.headers.common['Authorization'] = 'Bearer ' + context.state.token axios.get('http://127.0.0.1:8000/api/user').then((response) => { console.log(response) context.commit('Permissions', response.data.permission) }) } //mutation: Permissions(state, payload) { state.permissions = payload } //state state: { error: '', token: localStorage.getItem('token') || null, permissions: '', success: '', isLoggedin: '', LoggedUser: {} }
S'il vous plaît, aidez-moi à résoudre ce problème, merci !
Dans Vuex, les opérations sont asynchrones. La seule façon de faire savoir à la fonction appelante (l'initiateur de l'opération) que l'opération est terminée est de renvoyer une promesse et de la résoudre plus tard.
Voici un exemple : myAction renvoie une promesse, effectue un appel http, puis résout ou rejette la promesse de manière asynchrone.
}
Maintenant, lorsque votre composant Vue lancera myAction, il obtiendra cet objet Promise et pourra savoir s'il a réussi ou non. Voici un exemple de code pour les composants Vue :
}
De plus, lorsqu'aucune autorisation ne correspond, vous appelez la même route, qui continue d'appeler la même route et crée une boucle infinie. Si l'autorisation est refusée, redirigez vers la page d'accès refusé.