1、Vue概述
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,方便与第三方库或既有项目整合
2、Vue的快速入门
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>快速入门</title>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
{{message}} <!--Vue插值表达式,把data中定义数据显示到此处-->
<!--三元运算符-->
{{false ? "OK":"NO"}}
<!--数学运算-->
{{number*3.14}}
<!--插值表达式不支持
{{var a = 1;}}
{{if(a=10){}}}-->
</div>
</body>
<script>
//view model
//创建Vue对象
new Vue({
el:"#app",//由Vue接管id为app区域
data:{
message:"Hello Vue!",//注意,此处不用加分号
number:100
}
});
</script>
</html>
3、Vue的语法
插值表达式
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>插值表达式</title>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
{{message}}
<!--<input type="button" v-on:click="fun1('Vue v-on')" value="vue的onclick"></input>-->
<button v-on:click="fun1('Vue v-on')">vue的onclick</button>
</div>
</body>
<script>
new Vue({
el:"#app",
data:{
message:"Hello Vue"
},
methods:{
fun1:function(msg){
alert("Hello");
this.message=msg;
}
}
});
</script>
</html>
v-on:keydown
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>v-on:keydown</title>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
Vue:<input type="text" v-on:keydown="fun($event)">
<hr />
传统js:<input type="text" onkeydown="showKeyCode()" />
</div>
</body>
<script>
new Vue({
el:"#app",
methods:{
/*
* $event 它是vue中事件对象 和我们传统js的event对象是一致的
*/
fun:function(){
var keyCode = event.keyCode;
if(keyCode<48 || keyCode>57){
event.preventDefault();
}
}
}
});
//传统js键盘按下事件
function showKeyCode(){
//event对象和我们document对象以及window对象一样,可以不用定义直接使用
var keyCode = event.keyCode;
if(keyCode<48 || keyCode>57){
//不让键盘的按键起作用
event.preventDefault();
}
// alert(keyCode);
// if(event.keyCode == 13){
// alert("你按的是回车");
// }
};
</script>
</html>
v-on:onmouseover
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>v-on:onmouseover</title>
<style>
#div{
background-color: red;
width: 300px;
height: 200px;
}
</style>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<div v-on:mouseover="fun1" id="div">
<textarea v-on:mouseover="fun2($event)">这是一个文件域</textarea>
</div>
<!--传统的js-->
<!--<div onmouseover="divmouseover()" id="div">
<textarea onmouseover="textareamouseover()">这是一个文件域</textarea>
</div>-->
</div>
</body>
<script>
/*
* @事件名称就是 v-on 事件名称的简写
*/
new Vue({
el:"#app",
methods:{
fun1:function(){
alert("鼠标悬停在div上了");
},
fun2:function(event){
alert("鼠标悬停在textarea上了");
event.stopPropagation();
}
}
});
//传统js方式
function divmouseover(){
alert("鼠标移动到div上");
}
function textareamouseover(){
alert("鼠标移动到了textarea上");
event.stopPropagation();
}
</script>
</html>
v-on:事件修饰符
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>v-on:事件修饰符</title>
<style>
#div{
background-color: red;
width: 300px;
height: 200px;
}
</style>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<form @submit.prevent action="http://www.baidu.com" method="post">
<input type="submit" value="提交"/>
</form>
<hr />
<div @mouseover="fun1" id="div">
<textarea @mouseover.stop="fun2($event)">这是一个文件域</textarea>
</div>
<!--传统js-->
<!--<form action="http://www.baidu.com/" method="post" onsubmit="checkForm()">
<input type="submit" value="提交"/>
</form>-->
</div>
</body>
<script>
new Vue({
el:"#app",
methods:{
fun1:function(){
alert("鼠标悬停在div上了");
},
fun2:function(event){
alert("鼠标悬停在textarea上了");
// event.stopPropagation();
}
}
});
//传统js方式
function checkForm(){
alert(1);
//表单验证必须有一个明确的boolean类型返回值
//在引用验证方法时必须加上return方法名称
return false;
}
</script>
</html>
v-on:按键修饰符
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>v-on:按键修饰符</title>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
Vue:<input type="text" @keydown.enter="fun1">
<hr />
传统js:<input type="text" onkeydown="showKeyCode()">
</div>
</body>
<script>
//view model
new Vue({
el:"#app",
methods:{
fun1:function(){
alert("按下的是回车");
}
}
});
//传统js键盘按下事件
function showKeyCode(){
// //event对象和我们document对象以及window对象一样,可以不用定义直接使用
var keyCode = event.keyCode;
// if(keyCode<48 || keyCode>57){
// //不让键盘的按键起作用
// event.preventDefault();
// }
// alert(keyCode);
if(event.keyCode == 13){
alert("你按的是回车");
}
}
</script>
</html>
v-text与v-html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>v-text与v-html</title>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<div v-text="message"></div>
<div v-html="message"></div>
<!--<div id="div1"></div>
<div id="div2"></div>-->
</div>
</body>
<script>
new Vue({
el:"#app",
data:{
message:"<h1>Hello Vue</h1>"
}
});
//传统js的innerText和innerHtml
window.onload = function(){
document.getElementById("div1").innerHTML="<h1>Hello</h1>"
document.getElementById("div2").innerText="<h1>Hello</h1>"
}
</script>
</html>
v-bind的使用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>v-bind的使用</title>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<font size="5" v-bind:color="ys1">传智播客</font>
<font size="5" :color="ys2">黑马程序员</font>
</div>
</body>
<script>
//view model
/*插值表达式不能用于html标签的属性取值
例如:<font size="5" color="{{ys1}}">传智播客</font>
* */
//要想给html标签的属性设置变量的值,需要使用v-bind
//v-bind也可以简化写法 直接使用:
new Vue({
el:"#app",
data:{
ys1:"red",
ys2:"green"
}
})
</script>
</html>
v-model
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>v-model</title>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<form action="" method="post">
用户名:<input type="text" name="username" v-model="user.username"><br/>
密码:<input type="text" name="password" v-model="user.password"><br/>
</form>
</div>
</body>
<script>
//view model
new Vue({
el:"#app",
data:{
user:{
username:"test",
password:"1234"
}
}
});
</script>
</html>
v-for遍历数组
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>v-for遍历数组</title>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="(item,index) in arr ">{{item}}={{index}} </li>
</ul>
</div>
</body>
<script>
//view model
new Vue({
el:"#app",
data:{
arr:[1,2,3,4,5]
}
});
</script>
</html>
v-for遍历对象
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>v-for遍历对象</title>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="(key,value) in product ">{{value}}===={{key}} </li>
</ul>
</div>
</body>
<script>
//view model
new Vue({
el:"#app",
data:{
product:{
id:1,
name:"笔记本电脑",
price:5000
}
}
})
</script>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>v-for遍历对象</title>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<table border="1">
<tr>
<td>序号</td>
<td>编号</td>
<td>名称</td>
<td>价格</td>
</tr>
<tr v-for="(product,index) in products ">
<td>{{index}}</td>
<td>{{product.id}}</td>
<td>{{product.name}}</td>
<td>{{product.price}}</td>
</tr>
</table>
</div>
</body>
<script>
//view model
new Vue({
el:"#app",
data:{
products:[
{ id:1,name:"笔记本电脑",price:5000 },
{ id:2,name:"手机",price:3000 },
{ id:3,name:"电视",price:4000 }
]
}
})
</script>
</html>
v-if与v-show
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>v-if与v-show</title>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<span v-if="flag">传智播客</span>
<span v-show="flag">itcast</span>
<button @click="toggle">切换</button>
</div>
</body>
<script>
//view model
new Vue({
el:"#app",
data:{
flag:false
},
methods:{
toggle:function(){
this.flag = !this.flag;
}
}
})
</script>
</html>
vuejs生命周期
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>vuejs生命周期</title>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
{{message}}
</div>
</body>
<script>
var vm = new Vue({
el: "#app",
data: {
message: 'hello world'
},
beforeCreate: function() {
console.log(this);
showData('创建vue实例前', this);
},
created: function() {
showData('创建vue实例后', this);
},
beforeMount: function() {
showData('挂载到dom前', this);
},
mounted: function() {
showData('挂载到dom后', this);
},
beforeUpdate: function() {
showData('数据变化更新前', this);
},
updated: function() {
showData('数据变化更新后', this);
},
beforeDestroy: function() {
vm.test = "3333";
showData('vue实例销毁前', this);
},
destroyed: function() {
showData('vue实例销毁后', this);
}
});
function realDom() {
console.log('真实dom结构:' + document.getElementById('app').innerHTML);
}
function showData(process, obj) {
console.log(process);
console.log('data 数据:' + obj.message)
console.log('挂载的对象:')
console.log(obj.$el)
realDom();
console.log('------------------')
console.log('------------------')
}
// vm.message = "good...";
vm.$destroy();
</script>
</html>
Vue的生命周期:
https://cn.vuejs.org/v2/guide/instance.html#%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E5%9B%BE%E7%A4%BA
案例
实现用户的查询列表和更新操作
前端:Vue
后端:ssm
Github地址:
https://github.com/cxy629/Vue