1.搭建环境
1.1 下载npm和node
1.2 修改npm源
1.3 安装ElementUI
1 | npm install --save element-plus |
在main.js引入elementUI,
1 | import { createApp } from 'vue' |
2.axios
2.1 封装请求,拦截响应对错误统一处理
通过拦截器拦截response,对服务器返回的错误信息统一处理。
api.js
1 | import {ElMessage} from "element-plus"; |
对键值对的POST请求进行封装:
api.js
1 | // 封装键值对的POST请求 |
封装之后,要想使用还得在使用的页面导入:
1 | import {postKeyValueRequest} from "../util/api"; |
这样太麻烦了,可以把它们定义成全局的插件使用,使用的时候无需导入,通过this去调用。
mian.js
定义成全局属性:
1 | import { createApp } from 'vue' |
使用的时候:
1 | // 无需导入,通过this调用 |
2.2 跨域
前端是在8080端口启动,后端是在8081端口启动,在开发的时候,当前端去访问后端的时候,由于端口不一致,会导致跨域问题。
需要配置代理,在根目录下创建vue.config.js
文件(文件名称固定),
代理和baseUrl不能同时设置,否则代理不生效。
1 | const proxy = { |
2.3 页面跳转
使用路由进行页面跳转有两种方式:
- replace:不能返回跳转前的页面
- push:可以通过浏览器返回跳转前的页面
1 | this.$router.replace("/home") |
2.4 session操作
1 | // 保存到session,数据只能是String类型 |
2.5 获取路由参数
children中的路由只能在它父级路由的
1 | const routes = [ |
从路由中获取参数,动态渲染菜单:
注意this.$router在setup函数中是不能使用this的
1 | <template> |
菜单
处理后端返回数据
从服务器端返回的数据中,component是字符串类型的,而router中的component是对象类型,需要进行转换。
我们封装一个menu.js
来进行转换。
1 | import {getRequest} from "./api"; |
同时,需要把数据保存在store中,这样才能全局使用。
1 | import { createStore } from 'vuex' |
加载菜单的时机
我们可以在加载Home页面的时候初始化菜单数据,但是如果采用这种方式,跳转到别的页面,又需要加载多一次菜单,这就不得不在每个页面都写上initMenu的方法。
可以使用导航守卫
来监控路由,由跳转的路由来决定是否加载菜单数据。
mian.js
中注册前置导航守卫:
- to:对象类型,代表即将跳转的路由
- from:对象类型,代表从哪个路由过来的
- next:是一个函数,只有执行next()才会往下继续执行,关键所在
1 | router.beforeEach( (to, from ,next) => { |
当然,在注销登录的时候也需要清空store.state.routes的值,否则退出登录后,看到的还是上一个人的菜单数据。
1 | logout() { |
使用图标库
使用font-awesome的图标库需要先安装,然后在main.js中导入对应的css文件
1 | npm install font-awesome |