npm install -g @vue/cli
vue ui
使用图形向导来创建 vue 项目,如下图,输入项目名
选择手动配置项目
添加 vue router 和 vuex
选择版本,创建项目
进入项目目录,执行
npm run serve
前端服务器默认占用了 8080 端口,需要修改一下
文档地址:DevServer | webpack
打开 vue.config.js 添加
const {
defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
// ...
devServer: {
port: 7070
}
})
为了避免前后端服务器联调时, fetch、xhr 请求产生跨域问题,需要配置代理
文档地址同上
打开 vue.config.js 添加
const {
defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
// ...
devServer: {
port: 7070,
proxy: {
'/api': {
target: 'http://localhost:8080',
changeOrigin: true
}
}
}
})
PS D:\2022.js\代码\第3章\client> tree src
D:\2022.JS\代码\第3章\CLIENT\SRC
├─assets
├─components
├─router
├─store
└─views
以后还会添加
Vue 的组件文件以 .vue 结尾,每个组件由三部分组成
入口组件是 App.vue
先删除原有代码,来个 Hello, World 例子
{
{msg}}
解释
{ {}}
在 Vue 里称之为插值表达式,用来绑定 data 方法返回的对象属性,绑定的含义是数据发生变化时,页面显示会同步变化
{
{ name }}
{
{ age > 60 ? '老年' : '青年' }}
{ {}}
里只能绑定一个属性,绑定多个属性需要用多个 { {}}
分别绑定
{
{count}}
男
女
游泳
打球
健身
{
{fullName}}
{
{fullName}}
{
{fullName}}
创建实例
const _axios = axios.create(config);
常见的 config 项有
名称 | 含义 |
---|---|
baseURL | 将自动加在 url 前面 |
headers | 请求头,类型为简单对象 |
params | 跟在 URL 后的请求参数,类型为简单对象或 URLSearchParams |
data | 请求体,类型有简单对象、FormData、URLSearchParams、File 等 |
withCredentials | 跨域时是否携带 Cookie 等凭证,默认为 false |
responseType | 响应类型,默认为 json |
例
const _axios = axios.create({
baseURL: 'http://localhost:8080',
withCredentials: true
});
await _axios.post('/api/a6set')
await _axios.post('/api/a6get')
响应格式
名称 | 含义 |
---|---|
data | 响应体数据 ⭐️ |
status | 状态码 ⭐️ |
headers | 响应头 |
请求拦截器
_axios.interceptors.request.use(
function(config) {
// 比如在这里添加统一的 headers
return config;
},
function(error) {
return Promise.reject(error);
}
);
响应拦截器
_axios.interceptors.response.use(
function(response) {
// 2xx 范围内走这里
return response;
},
function(error) {
// 超出 2xx, 比如 4xx, 5xx 走这里
return Promise.reject(error);
}
);
学生列表
编号
姓名
性别
年龄
显示学生数据
暂无学生数据
学生列表
编号
姓名
性别
年龄
{
{s.id}}
{
{s.name}}
{
{s.sex}}
{
{s.age}}
暂无学生数据
按钮组件
使用组件
父组件
1
2
3
安装
npm install element-ui -S
引入组件
import Element from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(Element)
测试,在自己的组件中使用 ElementUI 的组件
按钮
搜索
''
表示用户没有选择的情况0,20
会被 spring 转换为 new int[]{0, 20}
''
会被 spring 转换为 new int[0]
级联选择器中选项的数据结构为
[
{
value:100, label:'主页',children:[
{
value:101, label:'菜单1', children:[
{
value:105, label:'子项1'},
{
value:106, label:'子项2'}
]},
{
value:102, label:'菜单2', children:[
{
value:107, label:'子项3'},
{
value:108, label:'子项4'},
{
value:109, label:'子项5'}
]},
{
value:103, label:'菜单3', children:[
{
value:110, label:'子项6'},
{
value:111, label:'子项7'}
]},
{
value:104, label:'菜单4'}
]}
]
下面的例子是将后端返回的一维数组【树化】
vue 属于单页面应用,所谓的路由,就是根据浏览器路径不同,用不同的视图组件替换这个页面内容展示
新建一个路由 js 文件,例如 src/router/example14.js,内容如下
import Vue from 'vue'
import VueRouter from 'vue-router'
import ContainerView from '@/views/example14/ContainerView.vue'
import Logi