Vue 常用命令和快速入门
目录:
- vue的入门
- vue绑定事件
- vue绑定标签体内容
- vue绑定标签的属性
- vue绑定表单项的value
- vue数据遍历
- vue绑定标签的显示与隐藏
- vue的生命周期
- axios发送异步请求
因为主要不是学前端的,这里整理的是作为后端人员,该掌握的Vue的常用知识,仅仅入门使用,想要细致了解Vue的功能,可以去浏览官方文档
地址:https://cn.vuejs.org/v2/guide/
1.案例-Vue快速入门
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue的入门</title>
<!--可以本地引入,也可通过网络配置-->
<!--<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>-->
<script src="../js/vuejs-2.5.16.js"></script>
</head>
<body>
<!--
vue的使用步骤:
1. 准备一个vue的容器(div),并且指定id,我们需要使用vue的所有标签都放在这个div中
2. 在vue的容器外面(下面)编写script标签,script标签里面就编写vue的代码
3. vue的具体代码如下
-->
<div id="app">
<!--使用插值表达式进行数据的绑定-->
<div id="msg">{{message}}</div>
</div>
<script>
const vue = new Vue({
// 绑定id
el:"#app",
//这里面就是所有的数据模型
data:{
message:"Hello, Vue!!"
},
//定义方法
methods:{
function(){
console.log("这是一个方法")
}
}
});
</script>
</body>
</html>
页面效果:
数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值表达式,Mustache 标签将会被替代为对应数据对象上属性的值。无论何时,绑定的数据对象上属性发生了改变,插值处的内容都会更新.
2.vue绑定事件
v-on就相当于@
掌握常用的事件:
- @click :鼠标点击
- @keydown:键盘按下
- @mouseover:鼠标进入
- @blur:失去焦点
2.1 @click
【需求】:点击按钮事件,改变message的值
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>vue绑定事件</title>
<script src="../js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<div id="msg">{{content}}</div>
<!--vue的方式绑定点击事件,当change事件没有参数时,可以加()也可以不加-->
<input type="button" value="改变" @click="change">
</div>
<script>
var vue = new Vue({
el:"#app",
data:{
content:"你好世界"
},
methods:{
change(){
this.content = "hello world"
}
}
});
</script>
</body>
</html>
2.2 @mouseover
【需求】:给指定区域大小的div中添加样式,鼠标移到div中,弹出窗口。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>mouseover事件</title>
<style>
.box {
width: 300px;
height: 400px;
border: 1px solid red;
}
</style>
<script src="../js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<div class="box" @mouseover="fn1()">
div
</div>
</div>
<script>
var vue = new Vue({
el:"#app",
methods:{
fn1(){
alert("鼠标移入了.....")
}
}
});
</script>
</body>
</html>
3.vue绑定标签体内容
v-text与v-html(重点)
v-text与v-html的使用,它的效果和插值表达式的效果是差不多的
区别:
v-text:输出文本内容,不会解析html元素
v-html:输出文本内容,会解析html元素
用在标签的属性里面
【需求】:分别使用v-text, v-html 赋值 <h1>hello world<h1>
,查看页面输出内容。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue绑定标签体的内容</title>
<script src="../js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<!--使用v-text可以绑定标签体中文本内容-->
<div v-text="msg1"></div>
<!--使用v-html可以绑定标签体中的所有内容-->
<div v-html="msg2"></div>
</div>
<script>
var vue = new Vue({
el:"#app",
data:{
msg1:"这是消息1",
msg2:"<h1>这是消息2</h1>"
}
});
</script>
</body>
</html>
演示结果:
4.vue绑定标签的属性
v-bind可以使用 :替代
插值语法不能作用在HTML 属性上,遇到这种情况应该使用 v-bind指令
<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>vue绑定属性</title>
<script src="../js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<!--
绑定a标签的href属性
-->
<a v-bind:href="url">跳转百度</a><br>
<font v-bind:color="color">你好世界</font>
</div>
<script>
var vue = new Vue({
el:"#app",
data:{
url:"http://www.baidu.com",
color:"red"
}
});
</script>
</body>
</html>
5.vue绑定表单项的value
用于数据的双向绑定,数据变化了,视图就变化,视图变化了 数据就变化
【需求】:使用vue赋值json(对象)数据,并显示到页面的输入框中(表单回显). 点击获取数据,在控制台输出表单中的数据;点击回显数据,设置表单的数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-model绑定表单项的value</title>
<script src="../js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<form>
用户名:<input type="text" name="username" v-model="user.username"><br>
密码:<input type="text" name="password" v-model="user.password"><br>
地址:<input type="text" name="address" v-model="user.address"><br>
email:<input type="text" name="email" v-model="user.email"><br>
<input type="button" value="获取表单数据" @click="getFormData"><br>
<input type="button" value="回显表单数据" @click="setFormData"><br>
</form>
</div>
<script>
const vue = new Vue({
el: "#app",
data: {
user:{}
},
methods: {
getFormData(){
console.log("获取数据为"+this.user.username)
},
setFormData(){
const userInfo = {
username:"hq",
password:"1234",
address:"江苏省徐州市",
email:"hq@qq.com"
}
this.user = userInfo
}
}
});
</script>
</body>
</html>
演示结果:
默认:
点击回显:
点击获取:
6.vue数据遍历
v-for
用于操作array/集合,遍历,元素是值,index是数字下标。元素的变量名随便取,索引的变量名随便取
语法: v-for="(元素,index) in 数组/集合"
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>使用v-for进行遍历绑定数据</title>
<script src="../js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<table width="600px" border="1" cellspacing="0" align="center">
<tr>
<th>id</th>
<th>name</th>
<th>address</th>
<th>email</th>
</tr>
<tr v-for="(linkMan,index) in linkManList">
<th v-text="linkMan.id"></th>
<th v-text="linkMan.name"></th>
<th v-text="linkMan.address"></th>
<th v-text="linkMan.email"></th>
</tr>
</table>
</div>
<script>
const vue = new Vue({
el: "#app",
data: {
cityList:["北京","上海","广州","深圳"],
linkManList:[
{
id:1,
name:"com.wangningbo",
address:"江苏省徐州市",
email:"wnb@qq.com"
},
{
id:2,
name:"hq",
address:"江苏省徐州市",
email:"hq@qq.com"
},
{
id:3,
name:"1314",
address:"江苏省徐州市",
email:"1314@qq.com"
},
]
},
methods: {
}
});
</script>
</body>
</html>
演示结果:
7.vue绑定标签的显示与隐藏
v-if 和 v-show
v-if是根据表达式的值来决定是否渲染元素(标签都没有了)
v-show是根据表达式的值来切换元素的display css属性(标签还在)。
通过按钮来显示图片和隐藏图片
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue绑定标签的显示和隐藏</title>
<script src="../js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<!--
给img标签绑定v-if,如果值为true就显示,值为false就隐藏; v-if是通过直接删除标签来隐藏标签的
给img标签绑定v-show,如果值为true就显示,值为false就隐藏;v-show是通过设置display为none来隐藏标签的
-->
<!--<img v-show="isShow" src="../img/mm.jpg" width="400px" height="400px">-->
<input type="button" value="切换显示和隐藏" @click="toggleImg()">
</div>
<script>
var vue = new Vue({
el:"#app",
data:{
isShow:true
},
methods:{
toggleImg(){
this.isShow = !this.isShow
}
}
});
</script>
</body>
</html>
演示结果:
点击按钮:
再点击:
8.Vue生命周期
vue实例从创建到销毁的过程.
每个 Vue 实例在被创建到销毁都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。
-
beforeCreate :数据还没有监听,没有绑定到vue对象实例,同时也没有挂载对象
-
created:数据已经绑定到了对象实例,但是还没有挂载对象(使用ajax可在此方法中查询数据,调用函数)
-
beforeMount: 模板已经编译好了,根据数据和模板已经生成了对应的元素对象,将数据对象关联到了对象的
el属性,el属性是一个HTMLElement对象,也就是这个阶段,vue实例通过原生的createElement等方法来创
建这个html片段,准备注入到我们vue实例指明的el属性所对应的挂载点 -
mounted:将el的内容挂载到了el,相当于我们在jquery执行了(el).html(el),生成页面上真正的dom,上面我们
就会发现dom的元素和我们el的元素是一致的。在此之后,我们能够用方法来获取到el元素下的dom对象,并
进行各种操作当我们的data发生改变时,会调用beforeUpdate和updated方法 -
beforeUpdate :数据更新到dom之前,我们可以看到$el对象已经修改,但是我们页面上dom的数据还
没有发生改变 -
updated: dom结构会通过虚拟dom的原则,找到需要更新页面dom结构的最小路径,将改变更新到
dom上面,完成更新 -
beforeDestroy,destroyed :实例的销毁,vue实例还是存在的,只是解绑了事件的监听、还有watcher对象数据与view的绑定,即数据驱动
目前:我基本上也记不住,记住下面两个关键点就好
- created()钩子函数中,数据模型就可以赋值了,那么我们可以在这个钩子函数中发送异步请求,获取响应数据然后赋值给数据模型(重点)
- mounted()钩子函数中,视图上就已经绑定了数据模型,那么我们就可以获取视图的内容
9.发送异步请求
axios:
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中
注: Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及其返回的值。
中文说明: https://www.kancloud.cn/yunye/axios/234845
语法:
引入,也可下载下来本地引入
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.0/axios.js"></script>
- get请求
// 为给定 ID 的 user 创建请求
axios.get('/user?id=12').then(response=>{
console.log(response);
}).catch(error=>{
console.log(error);
});
// 可选地,上面的请求可以这样做
axios.get('/user', {
params: {
id: 12
}
}).then(response=>{
console.log(response);
}).catch(error=>{
console.log(error);
});
- post请求
axios.post('/user', {
id: 12,
username:"jay"
}).then(response=>{
console.log(response);
}).catch((error=>{
console.log(error);
})
axios的使用:
需求:使用axios发送异步请求给ServletDemo01,并在页面上输出内容
步骤:
- 创建ServletDemo01
- 把axios和vue导入项目 引入到页面
- 使用get(), post() 请求
- html页面代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>使用axios发送异步请求</title>
<script src="js/axios-0.18.0.js"></script>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<!--
目标:当页面加载的时候,发送异步请求给ServletDemo01,
获取响应数据,展示到id为msg的div中
-->
<div id="msg" v-text="message"></div>
</div>
<script>
var vue = new Vue({
el:"#app",
data:{
message:""
},
created(){
//使用axios发送异步请求,异步的get请求可以通过url地址携带数据
axios.get("/demo01?id=12&username=jay").then(response =>{
//response就是服务器端的响应, response.data才是我们想要获取的响应体的数据
console.log(response.data)
this.message = response.data
})
//异步的get请求,还能通过json格式携带数据
axios.get("/demo01",{
params:{
id:12,
username:"jay"
}
}).then(response=>{
//拿到响应体的数据赋值给message
this.message = response.data
})
//axios发送异步的post请求,并且携带请求参数,post方式也可在url后面携带请求参数
axios.post("/demo01?id=13&username=aobama").then(response=>{
//拿到响应体的数据赋值给message
this.message = response.data
})
//axios发送异步的post请求,使用json格式携带请求参数
axios.post("/demo01",{id:14,username:"jay"}).then(response=>{
//拿到响应体的数据赋值给message
this.message = response.data
})
}
});
</script>
</body>
</html>
- ServletDemo01的代码
@WebServlet("/demo01")
public class ServletDemo01 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
doGet(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
//获取"name=value&name=value"类型的参数,用于测试前三种请求
/*String id = request.getParameter("id");
String username = request.getParameter("username");*/
//获取json类型的请求参数,测试第四种请求
Map user = JsonUtils.parseJSON2Object(request, Map.class);
//防止响应中文乱码
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("你好世界:"+user.get("id")+","+user.get("username"));
}
}
服务器要通过解析json获取参数的工具类,需要引入alibaba的fastjson:
package com.wangningbo.utils;
import com.alibaba.fastjson.JSON;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class JsonUtils {
/**
* 响应结果
* @param response
* @param obj
* @throws IOException
*/
public static void printResult(HttpServletResponse response, Object obj) throws IOException {
response.setContentType("application/json;charset=utf-8");
JSON.writeJSONString(response.getWriter(),obj);
}
/**
* 把json转成对象
* @param request
* @param tClass
* @param <T>
* @return
* @throws IOException
*/
public static <T> T parseJSON2Object(HttpServletRequest request, Class<T> tClass) throws IOException{
// 把表单数据之间转对象
return JSON.parseObject(request.getInputStream(),tClass);
}
}
- get方式携带请求参数,以及post方式通过url携带请求参数,实际上携带给服务器的参数的格式是"name=value&name=value&name=value", 服务器接收到这种格式的请求参数的时候,可以使用request的getParameter(name)或者getParameterValues(name)或者getParameterMap()方法获取请求参数
- post方式通过json格式携带请求参数,那么提交给服务器的参数的格式是{name:value,name:value},服务器就无法通过以前的getParameter(name)等方法获取请求参数。那么服务器要通过解析json获取,我们直接使用工具类就行了
小结
大体上常用的Vue知识点就是这些,下面一篇文章会根据上面的知识点,做一个联系人增删改查,分页的案例