vue 修饰符
1、表单修饰符
- v-model.lazy:改变输入框的值时 value 不会改变,当光标离开输入框时,v-model 绑定的值 value 才会改变
- v-model.trim:类似于 trim(),把 v-model 绑定的值的首尾空格过滤
- v-model.number:将值转换为数字
- 先输入数字的话,只取前面数字部分
- 先输入字母的话,number 修饰符无效
- v-bind.sync:对一个 prop 进行双向绑定的简写,父组件通过绑定属性的方式向子组件传值,而在子组件中可以通过$emit 向父组件 通信,通过这种间接的方式改变父组件的 data,从而实现子组件改变 props 的值
- 子组件传递的事件名必须是 update:value,其中 value 必须与子组件中的 props 中声明的名称完全一致
- 带有.sync 修饰符的 v-bind 不能和表达式一起使用(可使用计算属性),必须使用要绑定的属性名
父组件
vue
<template>
<child-com
:age="age"
@setAge="
(res) => {
age = res
}
"
></child-com>
</template>子组件
vue
<script>
export default {
methods: {
onClick() {
this.$emit('setAge', 18)
},
},
}
</script>等价写法
父组件
vue
<template>
<child-com :age.sync="age"></child-com>
</template>子组件
vue
<script>
export default {
onClick() {
this.$emit('update:age', 18)
},
}
</script>2、事件修饰符
v-on.stop:阻止事件冒泡,event.stopPropagation()方法
v-on.prevent:阻止原生事件,event.preventDefault()方法
v-on.self:点击事件绑定的本身才会触发事件
v-on.capture:反向冒泡,事件默认是由里往外冒泡,使用.capture 修饰符时候,事件触发由外往内捕获
v-on.passive:当监听元素的滚动事件的时候,会一直触发 onscroll 事件,在移动端页面会卡顿,使用.passive 会直接执行默认行 为,不等 onscroll 事件完成。
- 常用于监听 scoll、touchmove 事件使用
- 每次事件产生,浏览器都会去查询一下是否有 preventDefault 阻止该次事件的默认动作,通过 passive 将内核线程查询跳过,可 以大大提升滑动的流畅度
- passive 和 prevent 冲突,不能同时绑定在一个监听器上
.native:在某个组件的根元素上监听一个原生事件。一般将事件绑定用在 html 原生标签**,**在组件标签上使用的时候,就要加上 native 修饰符,这样就可以像原生标签一样使用事件绑定
签上使用的时候,就要加上 native 修饰符,这样就可以像原生标签一样使用事件绑定
template
<!-- 执行顺序:1,2,4,3 -->
<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>
<!-- 滚动事件的默认行为(即滚动行为)将会立即触发,不会等待onScroll完成 -->
<!-- 其中包含event.preventDefault()情况 -->
<div v-on:scroll.passive="onScroll">滑动</div>
<!-- myself-button 可绑定click事件,类似button -->
<myself-button @click.native="add('组件标签,包含native的点击')" /></myself-button>3、鼠标按键修饰符
- @click.left:鼠标左键
- @click.rigth:鼠标右键
- @click.midele:鼠标中键
4、键值修饰符
- @keydown/@keyup:键盘事件监听
- 按键码:.enter/.tab/.delete/.space 等
- 系统修饰键:.ctrl/.alt/.shift/.meta
- .exact:控制精确的系统修饰符组合触发的事件
template
<button @keyup.enter="submit">key为Enter时触发</button>
<div @click.ctrl="submit">ctrl + click时触发</div>
<button @click.ctrl.exact="submint">有且只有ctrl被按下时触发</button>
<button @click.exact="submint">没有任何系统修饰符被按下时触发</button>