Ini adalah pengawal laluan saya:
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() } });
Masalahnya ialah walaupun saya menggunakan await dalam kaedah penghantaran, saya tidak mendapat nilai status kebenaran yang pada mulanya kosong Ini adalah kod kedai 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: {} }
Tolong bantu saya menyelesaikan masalah ini, terima kasih!
Dalam Vuex, operasi tidak segerak. Satu-satunya cara untuk membiarkan fungsi panggilan (pemula operasi) mengetahui bahawa operasi selesai adalah dengan mengembalikan Janji dan menyelesaikannya kemudian.
Berikut ialah contoh: myAction mengembalikan Janji, membuat panggilan http dan kemudian menyelesaikan atau menolak Janji secara tidak segerak.
}
Kini, apabila komponen Vue anda melancarkan myAction, ia akan mendapat objek Promise ini dan boleh mengetahui sama ada ia berjaya atau tidak. Berikut ialah beberapa contoh kod untuk komponen Vue:
}
Selain itu, apabila tiada kebenaran sepadan, anda memanggil laluan yang sama, yang terus memanggil laluan yang sama dan mencipta gelung tak terhingga. Jika kebenaran ditolak, ubah hala ke halaman akses ditolak.