9、Vue 3 Pinia 使用实录:组件外使用存储

作者: 温新

图书: 【Vue 3 Pinia 使用实录】

阅读: 310

时间: 2024-11-23 02:15:55

嗨,我是温新

在学习的这些案例中,都是在组件内使用 store,如果是在组件外使用,会出现错误。

本次演示使用的是 《Vue 3 Vue Router 使用实录》 的代码

单页应用

确保始终应用此功能的最简单方法是延迟调用 useStore(),方法是将它们放在安装 pinia 后始终运行的函数中。

src/router/index.ts

import { createRouter, createWebHistory } from "vue-router"
import { createApp } from 'vue'
// 引入 Pinia 与 数据仓库
import { createPinia } from 'pinia'
import  useUserStore  from '../stores/user'

// 实例 pinia
const testPinia = createApp({}).use(createPinia())

const router = createRouter({
    history: createWebHistory(),
    routes:[
        {
            path:'/',
            redirect:'/home'
        },
        {
            path:'/home',
            name:'home',
            component: () => import('@/views/HomeView.vue'),
            meta:{
                'title':'首页',
            },
            children:[
                {
                    path:'/home/contact',
                    name:'联系我',
                    components: {
                        contact:() => import('@/views/ContactView.vue')
                    }
                },
                {
                    path:'/home/category',
                    name:'分类',
                    components: {
                        category:() => import('@/views/CategoryView.vue')
                    }
                }
            ]
        },
        {
            path:'/about',
            name:'about',
            component: () => import('@/views/AboutView.vue'),
            meta:{
                'title':'关于'
            },
            children: [
                {
                    path:'/about/post/:id',
                    name:"Post",
                    component: () => import('@/views/PostView.vue'),
                    props:true
                }
            ]
        },
        {
            path:'/:patchMatch(.*)',
            name:'404',
            component: () => import('@/views/404.vue')   
        },
        {
            path:'/login',
            name:'login',
            component: () => import('@/views/LoginView.vue'),
            meta:{
                'title':'登录',
            },
            // 拦截登录路由
            beforeEnter: (to, from ,next) => {
                console.log('单个拦截');
                
                console.log(to);
                next()
            }
        },
    ]
})

// 全局前置拦截
router.beforeEach((to, from, next) => {
    console.log('全局拦截');
    console.log(to);

    // 使用
    const userStore = useUserStore()
    console.log(userStore.age);


    if (to?.meta?.title) {
        document.title = '自如初-' + to.meta.title
    }

    next()
})

// 全局后置拦截
router.afterEach((to,from,next) => {
    console.log('后置拦截');
    console.log(to);


})

export default router
请登录后再评论