vue常见的事件修饰符,你知道多少?

2,239 阅读3分钟

关于vue事件修饰符你知道的有多少?

在vue中修饰符分为

  1. 表单修饰符
  2. 事件修饰符
  3. 鼠标按键修饰符
  4. 键值修饰符
  5. v-bind修饰符

表单修饰符

这个修饰符主要是用在表单常用的指令上,v-model对表单的输入内容进行修饰
关于表单修饰符有以下几个:

  • lazy
    lazy跟懒加载类似,在表单上我们填写信息的时候不会触发v-model值的变化,只有光标离开的时候才会赋值,也就是在input事件的oninput书法的时候不会赋值,当onchange触发的时候才会进行赋值
<input type = "text" v-model.lazy = "value">
<p>{{value}}</p>

trim
过滤掉输入内容的前后空格

<input type = "text" v-model.trim = "value">

number 会将输入的值转换为数值类型

<input v-model.number = "age" type = "number"

事件修饰符

事件修饰符是对事件捕获以及目标进行了处理
stop
阻止了事件冒泡,相当于调用了event.stopPropagation方法

<div @click="shout(2)">
<button @click.stop="shout(1)">ok</button>
</div> //只输出1

prevent
阻止了事件默认行为,相当于调用了event.preventDefault方法

<form v-on:submit.prevent="onSubmit"></form>

self
只有在event.target是当前元素自身时触发

<div v-on:click.self="doThat">...</div>

使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用
v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击
once
绑定的事件只能触发一次

<button @click.once="shout(1)">ok</button>

capture
让事件触发从包含这个元素的顶层开发往下依次触发

<div @click.capture="shout(1)">
    obj1
<div @click.capture="shout(2)">
    obj2
<div @click="shout(3)">
    obj3
<div @click="shout(4)">
    obj4
</div>
</div>
</div>
</div>
// 输出结构: 1 2 4 3

passive
这个我们以移动端监听元素滚动事件说明,在监听元素滚动事件的时候,会一直触发onscroll事件让页面变的越来越卡,因此在我们使用这个修饰符后,相当于给onscroll事件增加了.lazy修饰符

<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
<!-- 而不会等待 `onScroll` 完成 -->
<!-- 这其中包含 `event.preventDefault()` 的情况 -->
<div v-on:scroll.passive="onScroll">...</div>

native
让组件变成像html内置标签那样监听根元素的原生事件,否则组件上使用v-on只会监听自定义事件

<my-component v-on:click.native="doSomething"></my-component>

鼠标按钮修饰符

鼠标按钮修饰符针对的就是鼠标的左键(left)、右键(right)和中键(middle)的点击操作,如下:

<button @click.left="shout(1)">ok</button>
<button @click.right="shout(1)">ok</button>
<button @click.middle="shout(1)">ok</button>

键盘修饰符

键盘修饰符用来修饰键盘的事件(如:onkeyup、onkeydown等),键盘的事件触发需要相对应的keyCode。然而keyCode存在很多,因此为了使用方便Vue给我们提供了别名的修饰符,分为以下两种:

  • 普通按键(enter、delete、space、tab、esc…)
  • 系统修饰键(ctrl、shift、alt…)
    也可以直接用按键的代码来做修饰符(如:enter为13)
<!-- 键修饰符,键别名 -->
<input @keyup.enter="onEnter">
<!-- 键修饰符,键代码 -->
<input @keyup.13="onEnter">

官方例子:

Vue.config.keyCodes = {
  v: 86,
  f1: 112,
  // camelCase 不可用
  mediaPlayPause: 179,
  // 取而代之的是 kebab-case 且用双引号括起来
  "media-play-pause": 179,
  up: [38, 87]
  
  使用方式:
<input type="text" @keyup.media-play-pause="method">

}

v-bind修饰符

v-bind修饰符主要为属性进行操作的,这个也是所有修饰符中最不常用的一类,这些修饰符有:

  • async
    能对props进行一个双向绑定
//父组件
<comp :myMessage="bar" @update:myMessage="func"></comp>
func(e){
 this.bar = e;
}
//子组件
func2(){
  this.$emit('update:myMessage',params);
}

简写:
//父组件
<comp :myMessage.sync="bar"></comp> 
//子组件
this.$emit('update:myMessage',params);

使用async需要注意以下几点:
1.使用async的时候,自组件传递的事件名必须格式必须为update:value, 其中value必须与自组件中props中声明的名称完全一致
2.注意大理由.sync修饰符的v-bind不能和其他的表达式一起使用
3.将v-bind.sync用在一个字面量的对象上,例如v-bind.sync=“{title: doc.title}”, 是无法正常工作的
props
设置自定义标签属性,避免暴露数据,防止污染HTML结构

<input id="uid" title="title1" value="1" :index.prop="index">

应用场景:

vue修饰符应用场景
  • .stop :阻止事件冒泡
  • .native :绑定原生事件
  • .once:事件只执行一次
  • .self:将事件绑定在自身身上
  • .prevevt:阻止默认事件
  • .caption:用于事件捕获
  • .keyCode:用于键盘监听事件
  • .right:鼠标右键监听事件
  • .trim:用于输入框,去除内容前后空格
    了解更多点击跳转官网**