v-on
可以用 v-on 指令監聽 DOM 事件,並在觸發時運行一些 JavaScript 代碼
1.0v-on:click
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>事件處理 v-on示例1</title>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
{{message}}
<button v-on:click="fun1('good')">點擊改變</button>
</div>
<script>
new Vue({
el:'#app', //表示當前vue對象接管了div區域
data:{
message:'hello world' //注意不要寫分號結尾
},
methods:{
fun1:function(msg){
this.message=msg;
}
}
});
</script>
</body>
</html>
1.1v-on:keydown
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>事件處理 v-on示例2</title>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-on:keydown="fun2('good',$event)">
</div>
<script>
new Vue({
el: '#app', //表示當前vue對象接管了div區域
methods: {
fun2: function (msg, event) {
if (!((event.keyCode >= 48 && event.keyCode <= 57) || event.keyCode == 8 || event.keyCode == 46)) {
event.preventDefault();
}
}
}
});
</script>
</body>
</html>
1.2v-on:mouseover
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>事件處理 v-on示例3</title>
<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>
</div>
<script>
new Vue({
el : '#app', //表示當前vue對象接管了div區域
methods : {
fun1 : function() {
alert("div");
},
fun2 : function(event) {
alert("textarea");
event.stopPropagation();//阻止冒泡
}
}
});
</script>
</body>
</html>
事件修飾符
Vue.js 爲 v-on 提供了事件修飾符來處理 DOM 事件細節,如:event.preventDefault() 或event.stopPropagation()
Vue.js通過由點(.)表示的指令後綴來調用修飾符。
.stop
.prevent
.capture
.self
.once
<!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">
<form @submit.prevent action="http://www.itcast.cn" method="get">
<input type="submit" value="提交" />
</form>
<div @click="fun1">
<a @click.stop href="http://www.itcast.cn">itcast</a>
</div>
</div>
<script>
new Vue({
el : '#app', //表示當前vue對象接管了div區域
methods : {
fun1 : function() {
alert("hello itcast");
}
}
});
</script>
</body>
</html>
按鍵修飾符
Vue 允許爲 v-on 在監聽鍵盤事件時添加按鍵修飾符
全部的按鍵別名:
.enter
.tab
.delete (捕獲 "刪除" 和 "退格" 鍵)
.esc
.space
.up
.down
.left
.right
.ctrl
.alt
.shift
.meta
<!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">
<input type="text" v-on:keyup.enter="fun1">
</div>
<script>
new Vue({
el : '#app', //表示當前vue對象接管了div區域
methods : {
fun1 : function() {
alert("你按了回車");
}
}
});
</script>
</body>
</html>
<p><!-- Alt + C -->
<input @keyup.alt.67="clear">
<!-- Ctrl + Click -->
<div @click.ctrl="doSomething">Do something</div>
v-on簡寫方式
<!-- 完整語法 -->
<a v-on:click="doSomething">...</a>
<!-- 縮寫 -->
<a @click="doSomething">...</a>
1.3v-text與v-html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>v-html與v-text</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>
<script>
new Vue({
el : '#app', //表示當前vue對象接管了div區域
data : {
message : "<h1>世界你好</h1>"
}
});
</script>
</body>
</html>
v-bind
插值語法不能作用在 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>
<hr>
<a v-bind={href:"http://www.itcast.cn/index/"+id}>itcast</a>
</div>
<script>
new Vue({
el : '#app', //表示當前vue對象接管了div區域
data : {
ys1 : "red",
ys2 : "green",
id : 1
}
});
</script>
</body>
</html>
v-bind簡寫方式
<!-- 完整語法 -->
<a v-bind:href="url">...</a>
<!-- 縮寫 -->
<a :href="url">...</a>
1.4 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">
姓名:<input type="text" id="username" v-model="user.username"><br>
密碼:<input type="password" id="password" v-model="user.password"><br>
<input type="button" @click="fun" value="獲取">
</div>
<script>
new Vue({
el : '#app', //表示當前vue對象接管了div區域
data : {
user : {
username : "",
password : ""
}
},
methods : {
fun : function() {
alert(this.user.username + " " + this.user.password);
this.user.username = "tom";
this.user.password = "11111111";
}
}
});
</script>
</body>
</html>
1.5 v-for
1.5.1 操作array
<!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">
<ul>
<li v-for="(item,index) in list">{{item+" "+index}}</li>
</ul>
</div>
<script>
new Vue({
el : '#app', //表示當前vue對象接管了div區域
data : {
list : [ 1, 2, 3, 4, 5, 6 ]
}
});
</script>
</body>
</html>
1.5.2 操作對象
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>v-for示例1</title>
<script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="(value,key) in product">{{key}}--{{value}}</li>
</ul>
</div>
<script>
new Vue({
el : '#app', //表示當前vue對象接管了div區域
data : {
product : {
id : 1,
pname : "電視機",
price : 6000
}
}
});
</script>
</body>
</html>
1.5.3 操作對象數組
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>v-for示例1</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>
</tr>
<tr v-for="p in products">
<td>{{p.id}}</td>
<td>{{p.pname}}</td>
<td>{{p.price}}</td>
</tr>
</table>
</div>
<script>
new Vue({
el : '#app', //表示當前vue對象接管了div區域
data : {
products : [ {
id : 1,
pname : "電視機",
price : 6000
}, {
id : 2,
pname : "電冰箱",
price : 8000
}, {
id : 3,
pname : "電風扇",
price : 600
} ]
}
});
</script>
</body>
</html>
2.6 v-if與v-show
v-if是根據表達式的值來決定是否渲染元素
v-show是根據表達式的值來切換元素的display css屬性
<!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">hello Wordl!</span>
<button @click="toggle">切換</button>
</div>
<script>
new Vue({
el : '#app', //表示當前vue對象接管了div區域
data : {
flag : false
},
methods : {
toggle : function() {
this.flag = !this.flag;
}
}
});
</script>
</body>
</html>