vue3.0+vite+typescript项目架构搭建之路由配置

vue3.0+vite+typescript项目架构搭建之路由配置

项目路由目录结构

为了路由文件更好的管理,以模块进行路由文件划分。

1.创建路由主文件index.ts

    路由分2种模式,根据需要进行选择: 

 createWebHashHistory hash模式

createWebHistory History模式

/**
 * @description 路由配置文件
 * @author : lsx
 * @version : v1.0
 * @date : 2020/10/22 14:04
 */
// import VueRouter from "vue-router";
import {createRouter, createWebHashHistory, createWebHistory, RouterOptions} from "vue-router";
import {setPageTitle} from "./setPageTitle";
import {setRouterBefore} from "./routerBefore";

import sign from "./module/sign";
import home from "./module/home";
import admin from "/@/router/module/admin";

const routes: any = [
    ...admin,
    ...sign,
    ...home
];
// Vue-router新版本中,需要使用createRouter来创建路由
/**
 * createWebHashHistory hash模式
 * createWebHistory History模式
 */
const router = createRouter({
    history: createWebHashHistory(),
    routes
} as RouterOptions);

setRouterBefore(router);

router.afterEach(() => {
    // console.log("路由切换了");
});

setPageTitle(router);

export default router;

2.创建routerBefore.ts进行路由跳转处理

/**
 * @description 路由跳转前处理
 * @author : lsx
 * @version : v1.0
 * @date : 2020/12/14 9:04
 */
import type {Router} from "vue-router";
import {getToken, goLogin} from "../utils/common";
import Util from "/@/utils/util";
/*路由跳转前登录检验*/
export const setRouterBefore = (router: Router) => {
    router.beforeEach(async (to) => {
        // console.log(to);
        if (to.fullPath !== "/sign/login" && Util.isEmpty(getToken())) {
            goLogin();
            return;
        }
        return true;
    });
};

3.创建setPageTitle.ts进行设置页面标题

import type {Router} from "vue-router";

/**
 * 设置页面标题
 * @param {*} title  :页面标题
 */
const setDocumentTitle = (title: string) => {
    document.title = title;
    const ua = navigator.userAgent;
    // console.log(ua);
    const regex = /\bMicroMessenger\/([\d.]+)/;
    // 兼容
    if (regex.test(ua) && /ip(hone|od|ad)/i.test(ua)) {
        const i = document.createElement("iframe");
        i.src = "/favicon.ico";
        i.style.display = "none";
        i.onload = () => {
            setTimeout(() => {
                i.remove();
            }, 9);
        };
        document.body.appendChild(i);
    }
};
export const setPageTitle = (router: Router) => {
    router.beforeEach(async (to) => {
        setTimeout(() => {
            const title = "stars管理系统";
            if (to.meta.title) {
                const _title = to.meta.title ? ` ${to.meta.title}-${title} ` : `${title}`;
                setDocumentTitle(_title);
            }
        }, 30);
        return true;
    });
};

以上为项目路由的基本配置。

 


版权声明:本文为weixin_39720860原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。