四.事件修饰符
4.1 .stop
阻止冒泡
html代码:
<style>
.heade{
height: 150px;
background:red ;
}
</style>
<div id="app">
<div class="heade" @click="divHeader">
<!-- 使用.stop 阻止冒泡 -->
<input type="button" value="按钮" @click.stop="butHeader" />
</div>
</div>
vue代码:
var vm =new Vue({
el:'#app',
data:{},
methods:{
divHeader() {
console.log("div");
},
butHeader() {
console.log("but")
}
}
})
4.2 .prevent
阻止默认行为
html代码:
<div id="app">
<a href="www.baidu.com" @click.prevent="linkclick">点击一下,我不想去百度</a>
</div>
vue代码:
var vm =new Vue({
el:'#app',
data:{},
methods:{
linkclick() {
console.log("不去百度,留在页面");
}
}
})
4.3 .capture
实现捕获触发事件
html代码:
<style>
.heade{
height: 150px;
background:red ;
}
</style>
<div id="app">
<div class="heade" @click.capture="divHeader">
<input type="button" value="按钮" @click="butHeader" />
</div>
</div>
vue代码:
var vm =new Vue({
el:'#app',
data:{},
methods:{
divHeader() {
console.log("div");
},
butHeader() {
console.log("but")
}
}
})
4.4 .self
实现只有当前元素,才会触发事件处理函数
只会阻止自身的冒泡行为 ,不会阻止其他的冒泡行为
html代码:
<style>
.heade{
height: 150px;
background:red ;
}
</style>
<div id="app">
<div class="heade" @click.self="divHeader">
<input type="button" value="按钮" @click="butHeader" />
</div>
</div>
vue代码:
var vm =new Vue({
el:'#app',
data:{},
methods:{
divHeader() {
console.log("div");
},
butHeader() {
console.log("but")
}
}
})
4.5 .once
只触发一次
html代码:
<div id="app">
<a href="www.baidu.com" @click.once="linkclick">点击一下,我不想去百度</a>
</div>
vue代码:
var vm =new Vue({
el:'#app',
data:{},
methods:{
linkclick() {
console.log("啊啊啊啊,只能不去一次");
}
}
})
4.5 自定义按键修饰符
Vue.config.keyCodes.名称 = 按键值
Vue.config.keyCodes.f2=113
五.过滤器
可被用作一些常见的文本格式化
过滤器可以用在两个地方:mustache 插值和 v-bind 表达式
过滤器也可以多次调用
html代码:
<div id="app">
<p>{{msg | MsgFormat('疯狂','123') | testFormat }}</p>
</div>
vue代码:
Vue.filter('MsgFormat',function(msg,arg,arg2){
//字符串的 replace 方法第一个参数可以写字符串 也可以写正则表达式
return msg.replace(/好/g,arg+arg2)
})
//可以多次调用过滤器
Vue.filter('testFormat',function(msg){
return msg+'==========='
})
var vm = new Vue({
el: "#app",
data: {
msg:'你好我好大家好'
},
methods: {}
})
过滤器调用的格式 =={{ name | 过滤器的名称 }}==
5.1 定义全局过滤器
通过一个简单的案例 --- 对时间进行格式化
过滤器 是通过 Vue.filter() 定义过滤器
html代码:
<div id="app">
<div class="container">
<div class="row">
<div class="span12">
<table class="table table-hover">
<thead>
<tr>
<th>
id
</th>
<th>
name
</th>
<th>
createtime
</th>
<th>
操作
</th>
</tr>
</thead>
<tbody v-for="item in list " :key='item.id'>
<!-- 自定义一个方法 将关键字 作为参数传递到方法里-->
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{item.createtime | dateFormat}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
vue代码:
var vm = new Vue({
el: "#app",
data: {
list: [{
id: 1,
name: '宝马',
info: '很好',
createtime:new Date()
},
{
id: 2,
name: 'LV',
info: '很贵',
createtime:new Date()
}
]
},
methods: {}
})
过滤器
参数一: 'dateFormat' : 过滤器名称
参数二: 一个方法 可以有很多参数
但是第一个参数 永远都是 过滤器 管道符 --> '|' 前面传过来的数据
Vue.filter('dateFormat',function(dateString,patter=""){//patter一定要传值
// 根据指定的字符串得到特定的时间
var dt=new Date(dateString)
// padStart() 字符串在前面填充
//yyyy-mm-dd 获取年月日 时分秒
var y=dt.getFullYear()
var m=(dt.getMonth()+1).toString().padStart(2,'0')
var d=dt.getDate().toString().padStart(2,'0')
var h=dt.getHours().toString().padStart(2,'0')
var mm=dt.getMinutes().toString().padStart(2,'0')
var ss=dt.getSeconds().toString().padStart(2,'0')
//toLowerCase():将 所有英文字母转换为小写
if(patter && patter.toLowerCase() == 'yyyy-mm-dd'){
return y+'-'+m+'-'+d
}else{
return y+'-'+m+'-'+d+' '+h+':'+mm+':'+ss
}
})
5.2 自定义私有过滤器
私有局部过滤器,只能在 当前 VM 对象所控制的 View 区域进行使用
html代码:
<div id="app"></div>
<div id="app2">
<p v-color="'red'" >{{dt | dateFormat}}</p>
</div>
vue代码:
var vm2=new Vue({
el:'#app2',
data:{
dt:new Date()
},
//定义一个 私有过滤器 私有过滤器都具有[过滤器名称]和[处理函数]
//过滤器 采用就近原则
filters:{
dateFormat:function(dt,patter=""){
// 根据指定的字符串得到特定的时间
var dt=new Date(dt)
//yyyy-mm-dd 获取年月日 时分秒
var y=dt.getFullYear()
var m=dt.getMonth()+1
var d=dt.getDate()
var h=dt.getHours()
var mm=dt.getMinutes()
var ss=dt.getSeconds()
//toLowerCase():将 所有英文字母转换为小写
if(patter && patter.toLowerCase() == 'yyyy-mm-dd'){
return y+'-'+m+'-'+d
}else{
return y+'-'+m+'-'+d+' '+h+':'+mm+':'+ss
}
}
}
})
六.生命周期函数
从Vue实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期!
==生命周期钩子==(就是生命周期事件)= 生命周期函数 = 生命周期事件
6.1 创建时期的生命周期函数
6.1.1 beforeCreate()
实例刚在内存中被创建出来,此时,还没有初始化好 data 和 methods 属性
6.1.2 created()
实例已经在内存中创建OK,此时 data 和 methods 已经创建OK,此时还没有开始 编译模板
6.1.3 beforeMount()
此时已经完成了模板的编译,但是还没有挂载到页面中
6.1.4 mounted()
此时,已经将编译好的模板,挂载到了页面指定的容器中显示
6.2 运行时期的生命周期函数
6.2.1 beforeUpdate()
状态更新之前执行此函数, 此时 data 中的状态值是最新的,但是界面上显示的 数据还是旧的,因为此时还没有开始重新渲染DOM节点
6.2.2 updated()
实例更新完毕之后调用此函数,此时 data 中的状态值 和 界面上显示的数据,都已经完成了更新,界面已经被重新渲染好了!
6.3 销毁时期的生命周期函数
6.3.1 beforeDestroy()
实例销毁之前调用。在这一步,实例仍然完全可用。
6.3.2 destroyed()
Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁