02-Vue的事件修饰符,过滤器和生命周期函数

四.事件修饰符

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实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期!

生命周期钩子(就是生命周期事件)= 生命周期函数 = 生命周期事件
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 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁

posted @ 2019-12-10 09:44  okoka  阅读(212)  评论(0)    收藏  举报