简介: 指令的修饰符包括了v-model
的修饰符和v-bind
的修饰符,这些都是一些比较常用的修饰符,有便于我们平常的开发
v-model的修饰符
v-model
的修饰符分为3种.lazy,.trim,.number
v-model
在添加了.lazy
修饰符之后只有等输入框失去焦点之后或者按下enter键才会显示输入的内容
<template> <input v-model.lazy="demoText" type="text"/> <h1>{{ demoText }}</h1> </template>
![.lazy示意](https://www.www.zyiz.net/i/ll/?i=img_convert/94812afda97cb3a9b1324059d600ee1c.gif)
.trim
修饰符会将双向绑定的内容的首尾空格进行去除,和字符串的trim
方法效果是一致的,如果一直输入空格按钮,则绑定的值一直为''(空字符串)
,中间的空格是无法清除的。
<template> // 如果输入demoText为 ' abc ' 则显示为:abc // 如果输入demoText为 'a bc ' 则显示为:a bc <input v-model.trim="demoText" type="text"/> <h1>{{ demoText }}</h1> </template>
v-model
在加了.number
修饰符之后,会把输入的数值从字符串或其他类型转换为number类型
<template> // 如果输入demoText为 '' 则 typeText为string // 如果输入demoText为 '123' 则 typeText为number <input v-model.number="demoText" type="text"/> <h1> {{ typeText }} </h1> </template> <script> import { defineComponent ,ref ,computed} from 'vue' export default defineComponent({ setup(){ let demoText = ref('') let typeText = computed(()=>{ return typeof demoText.value }) return { demoText, typeText } } }) <script>
v-bind的修饰符
v-bind
的常用修饰符为.sync
v-bind
的属性名之后添加.sync
,可以通过$emit('update:属性名', value)
实现父子组件的数据双向绑定
<template> <div class="demo"> /* 实际扩展为: <child-comp :label="label" @update:label="val => label = val" /> */ <child-comp :label.sync="label" /> <div>{{ label }}</div> </div> </template> // childComp.vue <template> <div class="demoChild"> <button @click="$emit('update:label','修改父组件的label')"> 修改 </button> </div> </template>
当点击childComp.vue的button时,父组件的label则会改为 修改父组件的label
值的注意的是,vue3.0已经将
.sync
修饰符移除,与v-model
进行了一个融合
简介: 针对事件行为设计的修饰符,比如stopPropagation()[阻止冒泡]
,preventDefault()[阻止默认行为]
等等…
<!-- 阻止单击事件冒泡,当点击box2时就不会触发box1的点击事件,若不加则会触发 --> <div class="box1" @click="btn"> <div class="box2" @click.stop="btn1"></div> </div>
<!-- 提交事件不再重载页面 --> <form v-on:submit.prevent="onSubmit"></form>
<!-- 添加事件侦听器时使用事件捕获模式,先执行外层盒子事件,再执行里面盒子事件 --> <div v-on:click.capture="toDo">...</div>
<!-- 只当事件在该元素本身(而不是子元素)才去执行 --> <div v-on:click.self="toDo">...</div>
<button v-on:click.once="toDo"></button>
<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 --> <!-- 而不会等待 `onScroll` 完成 --> <!-- 这其中包含 `event.preventDefault()` 的情况 --> <div v-on:scroll.passive="onScroll">...</div>
.passive 修饰符尤其能够提升移动端的性能
不要把.passive
和.prevent
一起使用,因为.prevent
将会被忽略,同时浏览器可能会向你展示一个警告。passive
会告诉浏览器你不想阻止事件的默认行为
<!-- 修饰符可以串联,阻止默认事件 --> <a v-on:click.stop.prevent="toDo"></a> <!-- 只有修饰符 --> <form v-on:submit.prevent></form>
简介:通过键盘或鼠标的按键指定事件的触发方法(由于keyCode在Vue3.0废弃并且在一些高版本浏览器不支持,本文对keyCode形式的不作介绍)
示例:
```
// 按下回车键触发search方法
简介: 介绍了.exact
修饰符和.native
修饰符
作用: 精准的控制触发事件的按钮
// 只有按下enter键才可以触发search方法,如果同时按下 alt + enter 键,则不会触发 <input type="text" v-on:keyup.enter.exact="search" />
作用: 将原生事件绑定到组件,组件变成像html内置标签那样监听根元素的原生事件,否则组件上使用 v-on 只会监听自定义事件
```
/*
常用于一个纯icon组件,进行一个事件的绑定
*/
<comp @click.native=“consoleDetails” />
comp.vue <div> <img src="xxx"> </div> ```
值的注意: 在vue3.0中,将
.native
修饰符也进行了废弃,如果需要达到.native
的修饰符的方法则不能将绑定在组件标签上的方法注册进emits
选项中(或者defineEmits([])
)