欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

浅谈Vue.js中的v-on(事件处理)

程序员文章站 2022-09-08 11:32:40
vue.js的事件处理 监听事件 我们可以用 v-on 指令监听 dom 事件来触发一些 javascript 代码。

vue.js的事件处理

监听事件

我们可以用 v-on 指令监听 dom 事件来触发一些 javascript 代码。

<div class="box">
  {{msg}}
  <input type="button" value="按钮" v-on:click="msg+=1"/>
</div>
var vm = new vue({
  el:".box",
  data:{
    msg:1
  },
})

结果

浅谈Vue.js中的v-on(事件处理)

方法事件处理器

许多事件处理的逻辑都很复杂,所以直接把 javascript 代码写在 v-on 指令中是不可行的。因此 v-on 可以接收一个定义的方法来调用。

<div class="box">
  {{msg}}
  <input type="button" value="按钮" v-on:click="jia"/>
</div>
var vm = new vue({
  el:".box",
  data:{
    msg:1
  },
  // 在 `methods` 对象中定义方法
  methods:{
    jia:function(event){
      console.log(event)
    }
  }
})

结果

mouseevent {istrusted: true, screenx: 18, screeny: 107, clientx: 18, clienty: 17, …}

内联处理器方法

<div class="box">
  {{msg}}
  <input type="button" value="按钮" v-on:click="jia('my day')"/>
</div>
var vm = new vue({
  el:".box",
  data:{
    msg:1
  },
  methods:{
    jia:function(x){
      console.log(x)
    }
  }
})

结果

my day

事件修饰符

在事件处理程序中调用 event.preventdefault() 或 event.stoppropagation() 是非常常见的需求。尽管我们可以在 methods 中轻松实现这点,但更好的方式是:methods 只有纯粹的数据逻辑,而不是去处理 dom 事件细节。

为了解决这个问题, vue.js 为 v-on 提供了 事件修饰符。通过由点(.)表示的指令后缀来调用修饰符。

  • .stop
  • .prevent
  • .capture
  • .self
  • .once
<!-- 阻止单击事件冒泡 -->
<a v-on:click.stop="dothis"></a>
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onsubmit"></form>
<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="dothat"></a>
<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>
<!-- 添加事件侦听器时使用事件捕获模式 -->
<div v-on:click.capture="dothis">...</div>
<!-- 只当事件在该元素本身(比如不是子元素)触发时触发回调 -->
<div v-on:click.self="dothat">...</div>

使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 @click.prevent.self 会阻止所有的点击,而 @click.self.prevent 只会阻止元素上的点击。

<!-- 点击事件将只会触发一次 -->
<a v-on:click.once="dothis"></a>

不像其它只能对原生的 dom 事件起作用的修饰符,.once 修饰符还能被用到自定义的组件事件上. 如果你还没有阅读关于组件的文档,现在大可不必担心。

键值修饰符

在监听键盘事件时,我们经常需要监测常见的键值。 vue 允许为 v-on 在监听键盘事件时添加关键修饰符:

<div id="ar5">
  <input type="button" value="a" v-on:keydown="a">
</div>
var vm = new vue({
  el:"#ar5",
  data:{
    msg:1
  },
  methods:{
    a:function(e){
      console.log(e.keycode)
    }
  }
})

我们可以得到不同键的键值

结果

浅谈Vue.js中的v-on(事件处理)

记住所有的 keycode 比较困难,所以 vue 为最常用的按键提供了别名:

  • .enter
  • .tab
  • .delete (捕获 “删除” 和 “退格” 键)
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right

当然,如果你需要其他的键,vue.js也为你提供了可以通过全局 config.keycodes 对象自定义键值修饰符别名:

// 可以使用 v-on:keyup.f1
vue.config.keycodes.f1 = 112

修饰键

可以用如下修饰符开启鼠标或键盘事件监听,使在按键按下时发生响应。

  • .ctrl
  • .alt
  • .shift
  • .meta

注意:在mac系统键盘上,meta对应命令键 (⌘)。在windows系统键盘meta对应windows徽标键(⊞)。在sun操作系统键盘上,meta对应实心宝石键 (◆)。在其他特定键盘上,尤其在mit和lisp键盘及其后续,比如knight键盘,space-cadet键盘,meta被标记为“meta”。在symbolics键盘上,meta被标记为“meta” 或者 “meta”。

例如:

<!-- alt + c -->
<input @keyup.alt.67="clear">
<!-- ctrl + click -->
<div @click.ctrl="dosomething">do something</div>

修饰键比正常的按键不同;修饰键和 keyup 事件一起用时,事件引发时必须按下正常的按键。换一种说法:如果要引发 keyup.ctrl,必须按下 ctrl 时释放其他的按键;单单释放 ctrl 不会引发事件。

鼠标按键修饰符

这些修饰符会限制处理程序监听特定的滑鼠按键

  • .left
  • .right
  • .middle

为什么在html中监听事件

你可能注意到这种事件监听的方式违背了关注点分离(separation of concern)传统理念。不必担心,因为所有的 vue.js 事件处理方法和表达式都严格绑定在当前视图的 viewmodel 上,它不会导致任何维护上的困难。实际上,使用 v-on 有几个好处:

  • 扫一眼 html 模板便能轻松定位在 javascript 代码里对应的方法。
  • 因为你无须在 javascript 里手动绑定事件,你的 viewmodel 代码可以是非常纯粹的逻辑,和 dom 完全解耦,更易于测试。
  • 当一个 viewmodel 被销毁时,所有的事件处理器都会自动被删除。你无须担心如何自己清理它们。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。