03-Vue事件

1、v-on

 

<!-- 
	v-on用来绑定事件,格式=> v-on:事件名称(如click)="函数"
    函数名指这个函数,函数名+()是指函数执行后的返回值
	v-on简写@
 -->
	<input type="button" value="按钮" v-on:click="show">
	<input type="button" value="按钮@" @click="show">
    <input type="button" value="事件委托" @click="handleClick">
    <!-- 
	    带括号意味着传递参数,因为你没有传递所以打印的事件委托失效了
	    怎么解决?触发事件的时候传递$event
    -->
	<input type="button" value="事件委托()" @click="handleClick($event)">
	<input type="button" value="事件传递参数()" @click="handleRow('你好,')">

上述运行结果:

<script type="text/javascript">
	// vue实例
	var app = new Vue({
		el: "#app",
		// 存放数据变量
		data: {
			arr: ["html", "css", "js"],
			str: "vue"
		},
		// 存放函数的地方
		methods: {
			show() {
				console.log("我是show函数")
			},
			handleClick(e) {
				console.log(e)
				// 每次点击都会将str的内容添加到arr里面去
				this.arr.push(this.str)

				console.log(this.arr)
			},
			handleRow(str) {
				console.log(str + "打工人")
				// 函数嵌套
				this.show()
			}
		}
	})
</script>

 上述运行结果:

 2、点击事件的应用

<div id="app">
    <!-- 点击事件传参 -->
	<input type="submit" value="提交" @click="handleClick('函数传参数')">

	<ul>
		<!-- 当前点击的对象,当前点击对象的索引,事件对象 -->
        <!-- $event指事件本身,这里指点击事件的原型对象 -->
		<li v-for="(item,index) in stu" :key="index" 
            @click="handleRow(item,index,$event)">
			{{item.name}}
		</li>
	</ul>
</div>
<script type="text/javascript">
	var app = new Vue({
		el: "#app",
		// 存放变量的地方
		data: {
			arr: ["html", "css", "js"],
			stu: [{
					name: "小红",
					age: 18,
					sex: "女",
					sch: "北京大学"
				},
				{
					name: "小亮",
					age: 19,
					sex: "男",
					sch: "南京大学"
				},
				{
					name: "小明",
					age: 20,
					sex: "男",
					sch: "东京大学"
				},
			],
		},
		// 存放函数的地方
		methods: {
			handleClick(val) {
				console.log(val)
			},
			handleRow(row, i, e) {
				console.log(row, i, e)
			}
		}
	})
</script>

上述运行结果:

 3、事件例子

<div id="app">
	书名:<input type="text" v-model="str">
	作者:<input type="text" v-model="user">
	<input type="submit" value="新增" @click="add">

	<table border="1" width="500" cellspacing="0" cellpadding="0">
		<tr>
			<th>序号</th>
			<th>书名</th>
			<th>作者</th>
			<th>操作</th>
		</tr>
		<tr v-for="(item,index) in arr" :key="index">
			<td>{{index+1}}</td>
			<td>{{item.name}}</td>
			<td>{{item.user}}</td>
			<td>
				<a href="javascript:;" @click="del(index)">删除</a>
			</td>
		</tr>
	</table>
</div>
<script>
	var app=new Vue({
		el:"#app",
		data:{
			arr:[
				{
					name:"红楼梦",
					user:"曹雪芹"
				},
				{
					name:"三国演义",
					user:"罗贯中"
				},
			],

			str:"",
			user:""
		},
		methods:{
			del(index){
				console.log(index)
				// splice(要删除的下标,删除的长度)
				this.arr.splice(index,1)
			},
			add(){
				// 判断inupt框里面的内容不能为空
				if(this.str!=''&&this.user!=''){
					// 首先定义一个对象,然后把这个对象push到arr中
					let obj={
						// 将当前输入的内容赋值给对象中的属性
						name:this.str,
						user:this.user
					}
					// 将这个对象push到arr数组中
					this.arr.push(obj)
					// 添加完成之后清空内容
					this.str=''
					this.user=''
				}
				else{
					alert("内容不能为空")
				}
			}
		}
	})
</script>

上述运行结果:

  4、其他事件

<div id="app">
	<!-- focus、blur、mouseout、mousemove....... -->
	<input type="submit" value="鼠标移入" v-on:mouseover="handleDown($event)">
	<!-- @keyup.enter:当键盘抬起并且按得是回车键的时候触发 -->
	<input type="text" value="回车抬起" @keyup.enter="show">
</div>
<script>
	var app=new Vue({
		el:"#app",
		data:{

		},
		methods:{
			handleDown(e){
				console.log(e)
			},
			show(){
				console.log("登录成功")
			}
		}
	})
</script>

上述运行结果:

  5、篮球记分板

<div id="app">
	本场得分:{{score}} 分
	<p>
		<button @click="add">加分</button>
		<button @click="reduce">减分</button>
		<button @click="score+=3">三分球</button>
		<input type="text" v-model="num" @keyup.enter="handleE">
	</p>
</div>
<script>
	var app=new Vue({
		el:"#app",
		data:{
			// 分数,默认是0
			score:0,
			num:2
		},
		methods:{
			// 加分每次加1
			add(){
				this.score++
			},
			// 减分每次减1
			reduce(){
				if(this.score>0){
					this.score--
				}else{
					alert("不能再减了")
				}
			},
			handleE(){
				// 总分=当前输入的值加上原来的数值
				// this.score=Number(this.num)+Number(this.score)
				this.score+=Number(this.num)
			}
		}
	})
</script>

上述运行结果:

  6、阻止事件冒泡

事件冒泡:假如两个div都添加点击事件,当我点击里面的div的时候,外面div事件也会触发

<div id="app">
	<!-- 
		第一种方法:事件委托,e.stopPropagation()
	-->
	<div @click="fn">
		<input type="submit" value="点击" @click="handleClick">
	</div>
	<!-- 第二种方法:.stop -->
	<!-- 事件只触发一次 .once -->
	<div @click="fn">
		<input type="submit" value="点击" @click.stop="handleClick1">
	</div>
</div>
<script type="text/javascript">
	/*
		事件冒泡:两个div都添加点击事件,当我点击里面的div的时候,外面div事件也会触发
	*/ 
	var app=new Vue({
		el:"#app",
		data:{

		},
		methods:{
			fn(){
				console.log("我是爸爸")
			},
			handleClick(e){
				// js的原生方法
				// e.stopPropagation()
				console.log("我是后代")
				e.stopPropagation()
			},
			handleClick1(){
				console.log("我是后代")
			}
		}
	})
</script>

  7、阻止事件默认行为

<div id="app">
	<!-- 第一种阻止事件默认行为的方法: 
    js中的原生方法:e.preventDefault -->
	<a href="http://www.baidu.com" 
    target="_blank" @click="handleClick($event)">百度一下</a>
	<!-- 第二种阻止事件默认行为的方法: 修饰符.prevent -->
	<a href="http://www.baidu.com" target="_blank" 
    @click.prevent="handleClick1">百度一下</a>
</div>
<script>
	var app=new Vue({
		el:"#app",
		data:{

		},
		methods:{
			handleClick(e){
				e.preventDefault()
				console.log(e)
			},
			handleClick1(){
			}
		}
	})
</script>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

七色的天空

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

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

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

打赏作者

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

抵扣说明:

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

余额充值