IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> SpringBoot+Vue从零开始做网站5-前端vue项目全局路由和一些配置 -> 正文阅读

[JavaScript知识库]SpringBoot+Vue从零开始做网站5-前端vue项目全局路由和一些配置

vue项目创建好了并且集成了基础的后台管理系统,调用后端接口也调通了。接下来就是开发后台管理系统的其他功能了,首先就是把相关路由和一些基础工具配置一下。

vue的全局路由配置,router/index.js

代码:

import?{createRouter,?createWebHashHistory,?createWebHistory}?from?"vue-router";
import?Home?from?"../views/admin/Home.vue";
import?{authtoken}?from?"../api";
import?{ElMessage}?from?"element-plus";

//?全局路由(无需嵌套上左右整体布局)
const?globalRoutes?=?[
????{path:?'/404',?name:?'404',?meta:?{title:?'找不到页面'},?component:?()?=>?import?(/*?webpackChunkName:?"404"?*/?'../views/common/404.vue')},
????{path:?'/403',?name:?'403',?meta:?{title:?'没有权限'},?component:?()?=>?import?(/*?webpackChunkName:?"403"?*/?'../views/common/403.vue')},
????{path:?"/login",?name:?"Login",?meta:?{title:?'登录'},?component:?()?=>?import?(?/*?webpackChunkName:?"login"?*/?"../views/common/Login.vue")},
????{path:?'/error/:msg?',?name:?'error',?meta:?{title:?'系统错误'},?component:?()?=>?import?(?"../views/common/error.vue")}
]

//?前台路由(不用登陆也能访问)
const?skipLoadMenusRoutes=[
????{path:?'/index',?name:?'index',?component:?()?=>?import?(/*?webpackChunkName:?"index"?*/?"../views/index.vue"),?meta:?{title:?'小甜崽'}},
????{path:?'/blog',?name:?'blog',?component:?()?=>?import?(/*?webpackChunkName:?"blog"?*/?"../views/blog.vue"),?meta:?{title:?'小甜崽|生活日记'}},
?????{path:?'/about',?name:?'about',?component:?()?=>?import?(/*?webpackChunkName:?"about"?*/?"../views/about.vue"),?meta:?{title:?'小甜崽的自留地|关于我'}},
]

//?主入口路由(需嵌套上左右整体布局)
const?routes?=?[
????{path:?'/',redirect:?'/index',meta:?{title:?'ltBlog'}},
????{
????????path:?"/home",
????????name:?"Home",
????????component:?Home,
????????redirect:?'/dashboard',
????????children:?[
????????????{path:?"/dashboard",name:?"dashboard",meta:?{title:?'系统首页'},component:?()?=>?import?("../views/admin/Dashboard.vue")},
????????????{path:?"/articleList",name:?"articleList",meta:?{title:?'文章管理'},component:?()?=>?import?(?/*?webpackChunkName:?"articleList"?*/?"../views/admin/ArticleList.vue")},
????????????{path:?"/publishArticle",?name:?"publishArticle",?meta:?{title:?'文章发布'},?component:?()?=>?import?(?/*?webpackChunkName:?"publishArticle"?*/?"../views/admin/AddArticle.vue")},
????????????{path:?"/moodList",?name:?"moodList",?meta:?{title:?'心情说说'},?component:?()?=>?import?(?/*?webpackChunkName:?"moodList"?*/?"../views/admin/Mood.vue")},
????????????{path:?"/albumList",?name:?"albumList",?meta:?{title:?'相册管理'},?component:?()?=>?import?(?/*?webpackChunkName:?"albumList"?*/?"../views/admin/Album.vue")},
????????????{path:?"/photoList",?name:?"photoList",?meta:?{title:?'发布照片'},?component:?()?=>?import?(?/*?webpackChunkName:?"photoList"?*/?"../views/admin/Photo.vue")},
????????????{path:?"/fLinkList",?name:?"fLinkList",?meta:?{title:?'友链管理'},?component:?()?=>?import?(?/*?webpackChunkName:?"fLinkList"?*/?"../views/admin/FLink.vue")},
????????????{path:?'/editor',?name:?'editor',?meta:?{title:?'富文本编辑器'},?component:?()?=>?import?(/*?webpackChunkName:?"editor"?*/?'../views/admin/Editor.vue')}
????????]
????}
];

const?router?=?createRouter({
????history:?createWebHistory(),??//createWebHashHistory
????routes:routes.concat(globalRoutes).concat(skipLoadMenusRoutes)
});


/**
?*?动态加载菜单流程
?*?1、判断当前是否加载菜单
?*?2、出现在?globalRoutes?和?skipLoadMenusRoutes?中的路由不需要加载动态菜单。
?*/
router.beforeEach((to,?from,?next)?=>?{
????//输入不存在的路由则直接返回404
????if(to.matched.length?===?0){
???????//?from.path???next({name:?from.name})?:?next('/404')
????????next('/404')
????????return;
????}
????document.title?=?`${to.meta.title}?|?ltBlog`;
????const?token?=?localStorage.getItem('ms_token');

????let?currentRouteType?=?fnCurrentRouteType(to,?globalRoutes)
????if?(currentRouteType?!==?'global')?{
????????currentRouteType?=?fnCurrentRouteType(to,?skipLoadMenusRoutes)
????}
????//请求的路由在【不用登陆也能访问路由数组】中,则不用跳转到登录页
????if?(currentRouteType?===?'global')?{
????????next();
????}?else?{
????????//如果路由为空,并且不在【不用登陆也能访问路由数组】中?则跳转到登录页
????????if(!token){
????????????next('/login');
????????}else{
????????????//每次跳转路由都去判断token是否有效
????????????authtoken().then((res)?=>?{
????????????????//如果token无效或者已过期?则跳转到登录页
????????????????if(res.success?===?false){
????????????????????localStorage.removeItem("ms_token");
????????????????????ElMessage.error("登录过期,请重新登录");
????????????????????next('/login');
????????????????}else{
????????????????????next();
????????????????}
????????????});
????????}
????}
});

/**
?*?判断当前路由类型,?global:?全局路由,?main:?主入口路由
?*?判断逻辑:
?*????1、如果目标路由的name?或路径?出现在?globalRoutes?参数中
?*?@param?{*}?route?当前路由
?*?@param?{*}?globalRoutes?路由匹配数组
?*/
function?fnCurrentRouteType(route,?globalRoutes?=?[])?{
????var?temp?=?[]
????for?(var?i?=?0;?i?<?globalRoutes.length;?i++)?{
????????if?(route.path?===?globalRoutes[i].path?||?(route.name?!==?undefined?&&?route.name?===?globalRoutes[i].name))?{
????????????return?'global'
????????}?else?if?(globalRoutes[i].children?&&?globalRoutes[i].children.length?>=?1)?{
????????????temp?=?temp.concat(globalRoutes[i].children)
????????}
????}
????return?temp.length?>=?1???fnCurrentRouteType(route,?temp)?:?'Home'
}


export?default?router;

vue项目中 页面组件懒加载 使用webpackChunkNmae

在路由中使用?

component: () => import(/* webpackChunkName: "about" */ '../views/About.vue') 

来实现组件的懒加载? 这种配置会生产一个about.[hash].js

对于优化首屏很有帮助, 但对于内部页面会有一点损失,比较资源不会一次加载到位的。

使用 Vuex + Axios 方式进行网络请求

axios 是一个网络请求构架,官方推荐使用这种方式进行 http 的请求。

1) 在 utils 包下封装一个请求工具类 request.js

import axios from 'axios';
//import { MessageBox, Message } from 'element-ui'


const service = axios.create({
    // process.env.NODE_ENV === 'development' 来判断是否开发环境
    // easy-mock服务挂了,暂时不使用了
    baseURL: 'http://localhost:8080',
    timeout: 5000
});

/**
 * 请求拦截
 */
service.interceptors.request.use(
    config => {
        return config;
    },
    error => {
        console.log(error);
        return Promise.reject();
    }
);

/**
 * 响应拦截
 */
service.interceptors.response.use(
    response => {
        if (response.status === 200) {
            return response.data;
        } else {
            Promise.reject();
        }
    },
    error => {
        console.log(error);
        return Promise.reject();
    }
);

export default service;

2) 请求接口 API

在 api 文件夹下,创建一个index.js

import request from '../utils/request';

//查询文章列表
export const fetchData = query => {
    return request({
        url: 'http://localhost:8080/article/getList', 
        method: 'get',
        params: query
    });
};

设置全局变量

main.js
import {createApp} from 'vue'
const app = createApp(App)

// 挂载全局
app.config.globalProperties.$http = httpRequest // ajax请求方法

使用全局变量

import { ref, reactive, getCurrentInstance } from "vue";

const proxy = getCurrentInstance()?.appContext.config.globalProperties.$http;
proxy({
            method:'get',
            url:'/article/getList',
          }).then(res => {
            console.log(res)
            tableData.value = res;
            pageTotal.value = res.pageTotal || 50;
          })

注意:使用的是vue3.0

一些基础配置就好了,后面就是写接口,然后前端样式,后台主要就是列表的增删改查功能了。

?在博客中查看:从零开始做网站5-前端vue项目全局路由和一些配置 - ZJBLOG

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 18:03:56  更:2022-05-24 18:05:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:47:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码