Vue (二) 高级特性

1、修饰符

1.事件修饰符:
stop:阻止冒泡(事件冒泡:点击子元素,事件会一级一级冒泡到父元素)

举例:如下当点击子元素“按钮1”时会调用work1方法,还会冒泡到父元素并触发work方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	</head>
	<body>
		<div id="app" @click="work()" style="width:100px; height: 100px; background-color: #008000;">
			<button type="button" @click="work1()">按钮1</button>
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el: '#app',
				methods: {
					work: function() {
						console.log('调用work方法')
					},
					work1: function() {
						console.log('调用work1方法')
					}
				}
			})
		</script>
	</body>
</html>

在这里插入图片描述
通过.stop阻止冒泡,就不会触发父级元素事件。

<button type="button" @click.stop="work1()">按钮1</button>

.prevnet :阻止的默认行为事件行为

举例:当点击a标签时会跳转至链接页面,而.prevnet会阻止默认事件并指定新的点击事件,如下:点击百度时调用了work方法。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<a href="https://www.baidu.com" @click.prevent="work()">百度</a>
		</div>
		
		
		<script type="text/javascript">
			var vm = new Vue({
				el: '#app',
				methods: {
					work: function() {
						console.log('调用work方法')
					},
					work1: function() {
						console.log('调用work1方法')
					}
				}
			})
		</script>
	</body>
</html>

在这里插入图片描述
2.按键修饰符
在监听键盘事件时,经常需要检查详细的按键,Vue 允许为 v-on 在监听键盘事件时添加按键修饰
符:
如下:keyup.delete给账号输入框绑定清空方法clear(),keyup.enter给密码输入框绑定登录方法login()

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	</head>
	<body>
		<div id="app">
			
			<!-- 账号输入框点击delete按钮触发清空方法-->
			账号:<input type="text" v-model="user" @keyup.delete='clear()'><br>
			<!-- 密码输入框点击回车按钮触发登录方法-->
			密码:<input type="text" v-model='pwd' @keyup.enter="login()">
			<button type="button" @click="login()">登录</button>
		</div>
				
		<script type="text/javascript">
			var vm = new Vue({
				el: '#app',
				data:{
					user:'',
					pwd:''					
				},
				methods: {
					login: function() {
						console.log('调用登录方法')
					},
					clear:function(){
						this.user=''
					}
				}
			})
		</script>
	</body>
</html>

在这里插入图片描述

2、计算属性 computed

在一个计算属性里可以完成各种复杂的逻辑,包括运算、函数调用等,只要最终返回一个结果就可以,
遇到复杂逻辑时应该使用Vue特带的计算属性computed来进行处理

举例:当data中已有的属性发生变化时,computed属性会自动进行计算

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	</head>
	<body>
		<div id="app">
			number1:<input type="text" v-model="num1"><br>
			number2:<input type="text" v-model="num2">
			<h3>结果:{{res}}</h3>
		</div>
		
		
		<script type="text/javascript">
			var vm = new Vue({
				el: '#app',
				data:{
					num1:'',
					num2:''
				},
				computed:{
					res:function(){
						return this.num1*this.num2
					}
				}
			})
		</script>
	</body>
</html>

在这里插入图片描述

3、侦听器-watch

Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听器
在vue中可以使用watch来定义侦听器。

案例如下:
通过watch来定义侦听器,当name发送变化,下面的函数就会执行,function接收两个参数:新值,原始值

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<input type="text" v-model="name">
		</div>
		
		
		<script type="text/javascript">
			var vm = new Vue({
				el: '#app',
				data:{
					name:'java'
				},
				
				watch:{
					name:function(value,oldValue){
						console.log('原始值:',oldValue)
						console.log('新值:',value)
						alert('name发生了变化为:'+value)
					}
				}
			})
		</script>
	</body>
</html>

在这里插入图片描述
当data里面有多层嵌套数据时,侦听时的数据格式如下:a.b.c

var vm = new Vue({
				el: '#app',
				data:{
					a:{
						b:{
							c:'test'
						}
					}
				}

watch:{
		'a.b.c':function(value,oldValue){						
			}
		}

4、过滤器-filters

Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。过滤器通过“管道”符号指示,在vue实例对象中,通过filters配置项定义过滤器。

举例:格式化输出计算结果,保留两位小数

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="./vue.js"></script>
	</head>
	<body>
		<div id="app">
			num1:<input type="text" v-model="num1"/><br>
			num2:<input type="text" v-model="num2"/><br>
			结果:{{res | float2}}
		</div>
		
		<script type="text/javascript">
			var vm = new Vue({
				el:"#app",
				data:{
					num1:'',
					num2:''
				},
				computed:{
					res:function(){
						return this.num1*this.num2
					}
				},
				
				//定义过滤器,接收参数为被过滤的参数
				filters:{
					float2:function(value){
						return value.toFixed(2) // 保留两位小数
					}
				}
			})
		</script>
	</body>	
</html>

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久醉绕心弦,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值