目录
一:Ajax介绍--从url服务端加载数据
(Vue渲染数据,最开始数据是固定不可变的(html文件中敲得))--->DOM文档对象模型,其通过标签获取元素(文本,图片,视频),再更改数据,但这个过程还是在html文件中进行的--->Vue,可以在网页端操作数据--->Ajax从url服务端获取数据。拿到数据后,后面对数据进行处理就又回到DOM,CSS等基本操作)
(一)Ajax
Ajax:异步的JS和XML
作用:(1)数据交换
(2)异步交互
1.Ajax概述
2.同步与异步交互
同步:所有数据都加载完,才可以操作
3.原生Ajax(繁琐)
发送+响应
(二)Axios3
1. Axios:简化Ajax,便于使用---还是不推荐使用,代码依旧复杂
对比原生Ajax,Aios代码简介很多,其将创建对象+发送请求+接收响应封装在一段代码里
2.案例
<body>
<input type="button" value="读取数据GET" onclick="get()">
<input type="button" value="读取数据POST" onclick="post()">
</body>
<script>
function get(){
//通过axios发送异步请求--get
axios({
method:"get" ,
url:"http://yapi.smart-xwork.cn/mock/169327/emp/list"//服务器端url
}).then(result =>{
console.log(result.data);
})
}
function post(){
//通过axios发送异步请求--post
axios({
method:"post" ,
url:"http://yapi.smart-xwork.cn/mock/169327/emp/deleteById", //服务器端url
data:"id=1"
}).then(result =>{
console.log(result.data);
})
}
</script>
请求失败是网站打不开。
2.推荐使用的简化Axios代码
3.案例
第2步回到之前的Vue操作,v-for,v-if
主要是第一步如何从服务端(url)获取数据,并将其赋值给vue对象里的data
重点代码
二:前后端分离开发
(一)前后端开发介绍
前后端通过接口文档各自实现功能
接口文档示例
(二)YAPI(接口文档的管理平台)
API接口管理工作--管理API文档
Mock服务--自动生成模拟测试数据
三:前端工程化
(一)环境准备--安装NodeJS--Vue-ci
https://www.bilibili.com/video/BV1m84y1w7Tb?p=37&spm_id_from=pageDriver&vd_source=883ba25d74f359cc50daee8d9d826cc4
(二)vue项目
1.vue项目创建
Day03-06. 前端工程化-Vue项目开发流程_哔哩哔哩_bilibili
2.vue项目目录
3.vue项目启动
ctrl+shift+p搜索npm可调出如下NPM脚本,然后选第一个打开图形化界面
4.vue项目-配置端口
如何修改8080的端口号,要修改这个端口号,因为后面学的Java某个东西默认用这个端口号,所以这边要改掉
端口号改成了7000
(三)vue项目开发流程
1.vue组件
组件:自定义标签
在Vue项目的开发中,其实main.js以及index.html很少会去操作,主要修改的都是.vue文件(创建组件插件)
2.举例
四:Vue组件库Element
(一). 组件:自定义标签
(二)Element组件库
1.Element快速入门
在当前项目中安装Element库
(1)安装
终端输入:npm i element-ui -S
(2)引入element-ui组件库
在 main.js 中写入以下内容:
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)
});
(3)访问官网,复制代码并调整
注意:快捷键ctrl+alt+l格式化
网页展示的是app.vue的内容,如果需要展示ElementView的内容,需要,将其引入到app.vue中(调整)
ElementView
<template>
<div>
<!-- button按钮 -->
<el-row>
<el-button>默认按钮</el-button>
<el-button type="primary">主要按钮</el-button>
<el-button type="success">成功按钮</el-button>
<el-button type="info">信息按钮</el-button>
<el-button type="warning">警告按钮</el-button>
<el-button type="danger">危险按钮</el-button>
</el-row>
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
App.vue
<template>
<div id="app">
<h1>{{message}}</h1>
<element-view>
</element-view>
</div>
</template>
<script>
import ElementView from './views/element/ElementView.vue'
export default {
components:{ElementView},
data(){
return {
message:"hello world"
}
}
}
</script>
<style>
</style>
2.常见组件
1.Tabel表格
粘贴代码,调整
2.Pagination 分页
(1)属性
(2)事件
methods: {
handleSizeChange:function(ver){ //pageSize 改变时会触发
alert("每页条数"+ver)
},
handleCurrentChange:function(ver){ //currentPage 改变时会触发
alert("当前页数"+ver)
}
},
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
layout="sizes,prev, pager, next,jumper,total"
:total="1000">
</el-pagination>
3.Dialog 对话框,表单
<template>
<div>
<!-- button按钮 -->
<el-row>
<el-button>默认按钮</el-button>
<el-button type="primary">主要按钮</el-button>
<el-button type="success">成功按钮</el-button>
<el-button type="info">信息按钮</el-button>
<el-button type="warning">警告按钮</el-button>
<el-button type="danger">危险按钮</el-button>
</el-row>
<!-- 表格 -->
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="date" label="日期" width="180"> </el-table-column>
<el-table-column prop="name" label="姓名" width="180"> </el-table-column>
<el-table-column prop="address" label="地址"> </el-table-column>
</el-table>
<!-- 分页 -->
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
layout="sizes,prev, pager, next,jumper,total"
:total="1000">
</el-pagination>
<br><br>
<!-- 打开嵌套表格的 Dialog -->
<el-button type="text" @click="dialogTableVisible = true">打开嵌套表格的 Dialog</el-button>
<el-dialog title="收货地址" :visible.sync="dialogTableVisible">
<el-table :data="gridData">
<el-table-column property="date" label="日期" width="150"></el-table-column>
<el-table-column property="name" label="姓名" width="200"></el-table-column>
<el-table-column property="address" label="地址"></el-table-column>
</el-table>
</el-dialog>
<!-- 打开嵌套表单的 Dialog -->
<el-button type="text" @click="dialogFormVisible = true">打开嵌套表格的 Dialog</el-button>
<el-dialog title="Form表单" :visible.sync="dialogFormVisible">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label="活动名称" prop="name">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item label="活动区域" prop="region">
<el-select v-model="ruleForm.region" placeholder="请选择活动区域">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
</el-select>
</el-form-item>
<el-form-item label="活动时间" required>
<el-col :span="11">
<el-form-item prop="date1">
<el-date-picker type="date" placeholder="选择日期" v-model="ruleForm.date1" style="width: 100%;"></el-date-picker>
</el-form-item>
</el-col>
<el-col class="line" :span="2">-</el-col>
<el-col :span="11">
<el-form-item prop="date2">
<el-time-picker placeholder="选择时间" v-model="ruleForm.date2" style="width: 100%;"></el-time-picker>
</el-form-item>
</el-col>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
<el-button @click="resetForm('ruleForm')">重置</el-button>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
//表单对话框
ruleForm: {
name: '',
region: '',
date1: '',
date2: '',
},
dialogFormVisible: false,
//表格对话框
gridData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}],
dialogTableVisible: false, //通过这个值显示或隐藏表格,为true显示
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄'
}]
}
},
methods: {
//表单提交重置的方法
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
alert(JSON.stringify(this.ruleForm));
} else {
console.log('error submit!!');
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
},
//换页方法
handleSizeChange:function(ver){ //pageSize 改变时会触发
alert("每页条数"+ver)
},
handleCurrentChange:function(ver){ //currentPage 改变时会触发
alert("当前页数"+ver)
}
},
}
</script>
<style>
</style>
3.案例
(1)基本页面布局
(2)页面组件实现
(3)axios异步加载数据
<template>
<div>
<el-container>
<el-header>tlias智能学习辅助系统</el-header>
<el-container>
<el-aside width="200px" style="background-color: rgb(238, 241, 246)">
<el-menu :default-openeds="['1', '3']">
<el-submenu index="1">
<template slot="title"><i class="el-icon-message"></i>系统信息管理</template>
<el-menu-item index="1-1">部门管理</el-menu-item>
<el-menu-item index="1-2">员工管理</el-menu-item>
</el-submenu>
</el-menu>
</el-aside>
<el-main>
<!-- 表单 -->
<el-form :inline="true" :model="searchForm" class="demo-form-inline">
<el-form-item label="姓名">
<el-input v-model="searchForm.name" placeholder="姓名"></el-input>
</el-form-item>
<el-form-item label="性别">
<el-select v-model="searchForm.gender" placeholder="性别">
<el-option label="男" value="1"></el-option>
<el-option label="女" value="2"></el-option>
</el-select>
</el-form-item>
<!-- 日期选择器 -->
<el-form-item label="入职日期">
<el-date-picker
v-model="value1"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">查询</el-button>
</el-form-item>
</el-form>
<!-- 表格 -->
<el-table :data="tableData" border>
<el-table-column prop="name" label="姓名" width="180"></el-table-column>
<el-table-column prop="image" label="图像" width="180"></el-table-column>
<el-table-column prop="gender" label="性别" width="140"></el-table-column>
<el-table-column prop="job" label="职位" width="140"></el-table-column>
<el-table-column prop="entrydate" label="入职日期" width="180"></el-table-column>
<el-table-column prop="updatetime" label="最后操作时间" width="230"></el-table-column>
<el-table-column label="操作" >
<el-button type="primary" size="mini">编辑</el-button>
<el-button type="danger" size="mini">删除</el-button>
</el-table-column>
</el-table>
<!-- 分页 -->
<br>
<!-- 分页 -->
<el-pagination
background
layout="sizes,prev, pager, next,jumper,total"
:total="100">
</el-pagination>
</el-main>
</el-container>
</el-container>
</div>
</template>
<script>
export default {
data() {
return {
searchForm: {
name: '',
gender: ''
}
}
},
methods: {
onSubmit() {
console.log('submit!');
}
}
}
</script>
<style>
.el-header {
background-color: #B3C0D1;
color: #333;
text-align: center;
line-height: 60px;
}
.el-aside {
background-color: #D3DCE6;
color: #333;
text-align: center;
line-height: 600px;
}
</style>
五:Vue路由
1.前端路由
2.vue router
流程:
3.案例
六:打包部署
1.打包
2.部署
部署好后,浏览器访问: