十日谈 : Vue的事件监听v-on

欢迎阅读我的Vue学习日记

v-on介绍

1.作用:绑定事件监听器
2.缩写@
3.预期:Function|Inline Statement|Object(函数|内部表达式|对象)
4.参数:event

v-on基础和语法糖

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<div id="app">
<h2>
  {{counter}}
</h2>
  <button v-on:click="increment">+</button>
  <button v-on:click="decrement">-</button>
</div>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el:'#app',
    data:{
        counter:0
    },
    methods:{
      increment(){
        this.counter++
      },
      decrement(){
        this.counter--
      }
    }
  })
</script>
</body>
</html>

v-on也有语法糖

<button @click="increment">+</button>

v-on的参数传递问题

当通过methods中定义方法,以供@click调用时,需要注意参数问题:
情况一:如果该方法不需要额外参数,那么方法后的()可以不添加.
但是得注意:如果方法本身中有一个参数,那么会默认将原生事件evnet参数传递过去
情况二:如果需要同时传入某个参数,同时需要event时,可以通过$event传入事件

演示:
按钮1演示事件调用的方法没有参数
按钮2演示在事件定义时,写函数时省略了小括号,但是方法本身是需要一个参数的
(在事件定义时,写方法省略了小括号,但是方法本市是需要一个参数的,这个时候,vue会默认将浏览器生成的event事件对象作为参数传入到方法)
按钮3演示在方法定义时,我们需要event对象同时也需要其他参数
(在调用方法时,如何手动的获得浏览器参数的event对象:$event)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<div id="app">
  <button @click="btn1Click">按钮1</button>
  <button @click="btn2Click">按钮2</button>
  <button @click="btn3Click(123,$event)">按钮3</button>
</div>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el:'#app',
    data:{
        message:'Hello Vue'
    },
    methods:{
      btn1Click(){
        console.log('按钮1被按下')
      },
      btn2Click(event){
        console.log('按钮2被按下-----',event)
      },
      btn2Click(abc,event){
        console.log('按钮3被按下-----',abc,event)
      },
    }
  })
</script>
</body>
</html>

v-on的修饰符的使用

.stop修饰符的使用

阻止冒泡事件
请看注释

<!--    <button @click="btnClick">按钮</button>不加stop修饰符,会同时打印两个Click-->
    <button @click.stop="btnClick">按钮</button>
<!--    加了stop修饰符就不会打印div的冒泡-->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<div id="app">
  <div @click="divClick">
  divTouchMe
<!--    <button @click="btnClick">按钮</button>不加stop修饰符,会同时打印两个Click-->
    <button @click.stop="btnClick">按钮</button>
<!--    加了stop修饰符就不会打印div的冒泡-->
  </div>
</div>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el:'#app',
    data:{
        message:'Hello Vue'
    },
    methods:{
      btnClick(){
        console.log("btnClick");
      },
      divClick(){
        console.log("divClick");
      }
    }
  })
</script>
</body>
</html>

.prevent的使用

阻止默认事件

<div id="app">
  <form action="baidu">
    <input type="submit" value="提交">
  </form>
</div>

点击提交会自动提交
在这里插入图片描述
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<div id="app">
  <form action="baidu">
    <input type="submit" value="提交" @click.prevent="submitClick">
  </form>
</div>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el:'#app',
    data:{
        message:'Hello Vue'
    },
    methods:{
      btnClick(){
        console.log("btnClick");
      },
      divClick(){
        console.log("divClick");
      },
      submitClick() {
        console.log('submitClick');
      }
    }
  })
</script>
</body>
</html>

在submitClick里面自己收集数据自己发送访问请求

.{keyCode|keyAlias}的使用

监听键盘上某个按键的点击
1.监听所有的按键
keyup是按键抬起,keydown是按键按下

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<div id="app">
  <input type="text" @keyup="keyUp">
</div>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el:'#app',
    data:{
        message:'Hello Vue'
    },
    methods:{
      keyUp(){
        console.log('keyUp');
      }
    }
  })
</script>
</body>
</html>

2.监听回车的事件

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<div id="app">
  <input type="text" @keyup.enter="keyUp">
</div>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el:'#app',
    data:{
        message:'Hello Vue'
    },
    methods:{
      keyUp(){
        console.log('keyUp');
      }
    }
  })
</script>
</body>
</html>

.native 在后期学习组件的时候再说

.once 的使用

只触发一次回调
演示:当按钮只能被按下一次时

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<div id="app">
  <button @click.once="btnClick">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el:'#app',
    data:{
        message:'Hello Vue'
    },
    methods:{
      btnClick(){
        console.log('btnClick');
      }
    }
  })
</script>
</body>
</html>

在这里插入图片描述
只有一次回调,再次点击按钮没有任何反应.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值