pinia
import {defineStore} from 'pinia'
export const useMy = defineStore('my', () => {
return {user_id:'',username:''}
})
router
import { useMy } from '@/stores/my'
router.beforeEach(async (to, from, next) => {
const my = useMy();
my.user_id = 1;
my.username = 'user';
next();
})
HomeView.vue
<template>
<H1>HomeView.vue</H1>
</template>
<script>
import {useMy} from "@/stores/my";
export default {
name: "HomeView",
setup() {
const my = useMy();
console.log(my.username)
return {my}
}
}
我在router.beforeEach
中设置了,为什么组件中HomeView.vue
里面的console.log(my.username)
为空
问题出在你在组件中使用 useMy() ,它创建了一个新的 store 实例而不是你在 router.beforeEach 中设置的那个实例。
为了在不同的组件中共享相同的 store 实例,你需要在组件中使用 useStore() 方法,并将它传递给组件:
vue
Copy code
在 useStore() 方法中不需要传递参数,因为它默认使用主 store。
另外,在你的路由守卫中也有一个问题,你需要在 useMy() 方法中传递一个唯一的 ID,以确保它返回正确的 store 实例:
这将确保你在路由守卫中设置的是同一个 store 实例,可以在组件中共享和访问该实例。