Skip to content

Vue项目配置ElementUI、Router、Axios

一、配置ElementUI

在 main.js 中写入以下内容:

javascript
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue';

Vue.use(ElementUI);

new Vue({
  el: '#app',
  render: h => h(App)
});

添加一个按钮测试效果

88ed5237-c51e-419a-82cf-62e62c6add58

b0e3b23c-20e4-4aca-9eda-4956ec0be6bb

二、配置Router

1. 默认配置方式

将新增的.vue页面添加到routes数组中即可访问,可以使用import先引入页面,也可以直接在component: () => import( '/views/pages/xxx.vue')的方式引用

js
import Vue from 'vue'

import VueRouter from 'vue-router'
import HomeView from '/views/pages/HomeView.vue'

Vue.use(VueRouter)

const routes = [
    {
        path: '/',
        name: 'home',
        component: HomeView
    },
    {
        path: '/about',
        name: 'about',
        // route level code-splitting
        // this generates a separate chunk (about.[hash].js) for this route
        // which is lazy-loaded when the route is visited.
        component: () => import( '/views/pages/AboutView.vue')
    },{
    	path: '/login',
        name: 'login',
        component: () => import( '/views/pages/login.vue')
    }
]

const router = new VueRouter({
    routes
})

export default router

2. 通过目录结构自动生成路由

指定一个目录,遍历目录下所有.vue文件,以实现自动生成路由,

js
import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '/views/pages/HomeView.vue'

Vue.use(VueRouter)

const routes = []


function importAllVue(r){
  r.keys().forEach(key => {
    if (key.split('.')[1]==='/login'){
      routes.push({
        path: (key.split('.'))[1],
        component: ()=>r(key),
      })
    }else {
      routes.push({
        path: (key.split('.'))[1],
        meta: {
          requireAuth: true,
        },
        component: ()=>r(key),
      })
    }
  })

  console.log(routes)
}

importAllVue(require.context('/views/pages', true, /\.vue$/, 'lazy'))

const router = new VueRouter({
  routes
})

// 此处添加路由守卫代码 

export default router

注意:此处遍历中进行了判断,如果时登录页面就不要鉴权,否则都需要鉴权,需在下面拦截器中配置鉴权拦截

3. 路由拦截器配置(官方名称:路由守卫)

添加以下代码以实现登录拦截

js
/**
 * 路由拦截器
 */
router.beforeEach((to, from, next) => {
  if (to.matched.some(res=>res.meta.requireAuth)){
    console.log('进入鉴权拦截')
    // 检测是否有登录的token
    const token = localStorage.getItem('token')
    if (token){
      // 如果有token 下面可以通过调用获取用户信息接口或其他检测token的接口进行token有效性验证

      next()
    }else {
      // 没有token的情况下可以自动跳转到登录页面
      console.log('没有登录,跳转到登录页面')
      next({ path: '/login' });
    }
  }else{
    console.log('无需鉴权直接跳转')
    next()
  }
})

三、Axios配置

新建是个request.js文件,对axios做配置

js
// 导入axios
import axios from 'axios'
// 使用element-ui Meseage 做消息提醒
import { Message } from 'element-ui'

const service = axios.create({
    baseURL: 'http://localhost:8080/',
    timeout: 180 * 1000
})

// 请求拦截器
service.interceptors.request.use(config => {
    const token = localStorage.getItem('token');
    if (token) {
        // 请求头中携带token
        config.headers = {
            'token': token
        }
    }
    return config;
})

// 响应拦截器
service.interceptors.response.use(res => {
    // 请求信息码为0返回请求结果
    if (res.data.code === 200) {
        return res.data
    }else { // 否则显示报错信息
        Message.error(res.data.message)
    }
}, error => {
    // 报错是弹出错误信息
    Message.error(error.data.message)
})