一、事件修饰符
1 .stop 阻止自身的冒泡事件
<div id="app">
<!-- .stop 阻止自身的冒泡事件-->
<div @click="divClick">
<button @click.stop="btnClick">点击</button>
</div>
</div>
<script>
var vm = new Vue({
el:'#app',
data:{},
methods:{
divClick :function () {console.log("触发了div的点击事件")},
btnClick :function () {console.log("触发了btn的点击事件")}
}
})
</script>
2 .prevent 阻止默认事件
<div id="app">
<!--.prevent 阻止默认事件-->
<a href="http://www.baidu.com" @click.prevent="linkClick">百度一下</a>
</div>
<script>
var vm = new Vue({
el:'#app',
data:{},
methods:{
linkClick :function () {console.log("触发了a的点击事件")}
}
})
</script>
3 .capture 添加事件侦听器时使用事件捕获模式 : 用捕获的模式来触发
<div id="app">
<!--.capture 添加事件侦听器时使用事件捕获模式 : 用捕获的模式来触发-->
<div @click.capture="divClick">
<button @click="btnClick">点击
<span @click="linkClick">里面的事件</span>
</button>
</div>
</div>
<script>
var vm = new Vue({
el:'#app',
data:{},
methods:{
divClick :function () {console.log("触发了div的点击事件")},
btnClick :function () {console.log("触发了btn的点击事件")},
linkClick :function () {console.log("触发了a的点击事件")}
}
})
</script>
4 .self : 阻止自己身上的冒泡行为
<div id="app">
<!--.self : 阻止自己身上的冒泡行为-->
<div @click.self="divClick">
<button @click="btnClick">点击
<span @click="linkClick">里面的事件</span>
</button>
</div>
</div>
<script>
var vm = new Vue({
el:'#app',
data:{},
methods:{
divClick :function () {console.log("触发了div的点击事件")},
btnClick :function () {console.log("触发了btn的点击事件")},
linkClick :function () {console.log("触发了a的点击事件")}
}
})
</script>
5 .once 事件只触发一次
<div id="app">
<!--.once 事件只触发一次-->
<a href="http://www.baidu.com" @click.prevent.once="linkClick">百度一下</a>
</div>
<script>
var vm = new Vue({
el:'#app',
data:{},
methods:{
linkClick :function () {console.log("触发了a的点击事件")}
}
})
</script>
二、常用指令
1.v-text
<div id="app">
<h2 v-text="text"></h2>
</div>
<script>
let vm = new Vue({
el:'#app',
data:{text:"<span>html标签</span>"}
})
</script>
2.v-html
<div id="app">
<h2 v-html="text"></h2>
</div>
<script>
let vm = new Vue({
el:'#app',
data:{text:"<span>html标签</span>"}
})
</script>
3.v-cloak
解释:
①这个指令保持在元素上直到关联实例结束编译。和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。
②防止刷新页面,网速慢的情况下出现{{ message }}等数据格式
<div id="app">
<h1 v-cloak>{{text}}</h1>
</div>
<script>
let vm = new Vue({
el:'#app',
data:{text:"<span>html标签</span>"}
})
4.v-if 和 v-show 条件渲染
v-if:根据表达式的值的真假条件,销毁或重建元素
v-show:根据表达式之真假值,切换元素的 display CSS 属性
<div id="app">
<h1 v-show="false">v-show的显示和隐藏</h1>
<h1 v-if="isIf">v-if的显示和隐藏</h1>
</div>
<script>
let vm = new Vue({
el:"#app",
data:{
isIf:true,
msg:"请输入用户名"
}
})
</script>
5. v-model双向绑定数据
<input type="text" v-model="msg"/> {{msg}} <!--取数据-->
6.v-for循环
v-for语法 : item in arr
参数: arr: 要遍历的数组
item : 数组里的每一个元素
in: 特殊的语法
------------------------------------------------------------------
<div id="app">
<ul>
<li v-for="(item,i) in arr">
<span>{{i+1}}</span>
<span>{{item.name}}</span>
<span>{{item.age}}</span>
<span>{{item.sex}}</span>
</li>
</ul>
</div>
<script>
let vm = new Vue({
el:'#app',
data:{
arr:[
{name:'xiaoming', age :18, sex: "男"},
{name:'xiaoming', age :18, sex: "男"},
{name:'xiaoming', age :18, sex: "男"}
]
}
})
</script>
7.v-bind绑定属性
<div id="app">
<!--绑定属性-->
<img v-bind:src="imgSrc" alt="">
<!--简写-->
<img :src="imgSrc" alt="">
<!--class绑定 : 绑定的是字符串的类名-->
<h2 :class="'red'">class绑定</h2>
<h2 :class="['red', 'pink']">class绑定</h2>
<h2 :class="red">不写引号class绑定,去vm实例中找</h2>
<h2 :class="{red : flag, pink:true}">以对象的方式去写,通过布尔值判定,key是style里面的类名</h2>
<!--三元表达式: 当flag为true,就有red样式, 否则有pink样式-->
<h2 :class="[flag?red:pink]">三元表达式</h2>
</div>
<script>
let vm = new Vue({
el:'#app',
data:{
imgSrc:'1.png',
red:'red',
flag:true
}
})
</script>
8.v-on添加事件
<div id="app">
<button v-on:click="num++">点击+1</button>
<h1>{{num}}</h1>
<!--简写 小括号没有参数, 可以省略-->
<button @click="fn('hello')">点我弹框</button>
<h1>{{fn()}}</h1>
<!--点击切换颜色-->
<button @click="change" :class="{red: flag}">点击切换颜色</button>
</div>
<script>
let vm = new Vue({
el:'#app',
data:{
num:0,
flag: true
},
//在methods定义方法
methods:{
fn:function (sayHi) {
//console.log(sayHi)
return 11;
},
change: function () {
//此时的this是实例对象
console.log(this.flag)
this.flag = !this.flag;
}
}
})
</script>
9.v-class 类名
v-style 与v-class用法大致一样 这个我就不写了
<style>
.red {
background: red;
}
.blue {
width: 100px;
height: 100px;
background: blue;
}
</style>
<div id="box">
<div style="width: 100px;height: 100px;" v-bind:class='{red:isred}'></div>
<!--<div style="width: 100px;height: 100px;" v-bind:class='isred?"red":"blue"'></div>--> <!--三元运算符方式-->
<!--<div style="width: 100px;height: 100px;" v-bind:class='[{red:"isred"}]'></div>-->
</div>
<script>
new Vue({
el: "#box",
data(){
return {
isred:false
}
}
})
</script>
10.v-pre 把标签内部的元素原位输出
<div id="box">
<div v-pre>欢迎--{{msg}}</div>
</div>
<script>
new Vue({
el:"#box",
data(){
return{
msg:"111111"
}
}
})
</script>