Vue3 03.内置指令
内容渲染指令
v-text
v-text
通过设置元素的textContent
属性来工作,因此它将覆盖元素中所有的内容。如果仅仅需要更新textContent
的部分,应该使用模板语法的文本插值方式,即{{ }}
形式。
示例:
<span v-text="msg"></span> |
v-html
v-html
用于更新元素的innerHTML
,会将内容直接作为普通HTML插入。在站点上动态渲染任意的HTML是非常危险的,因为它非常容易受到XSS攻击,所以只能对信任的内容使用HTML插值,不能将用户提供的内容作为插值。
<p>Using text interpolation: {{ rawHtml }}</p> |
v-on
v-on
可以给元素绑定事件监听器。v-on
可以缩写为@
。可以绑定的值类型为:Function | Inline Statement | Object(不带参数)
,参数为event
(如果使用对象语法的话,那么为可选项)。
<!-- 绑定函数 --> |
绑定的事件可以是动态的,例如可以使用@[event]="doThis"
,event
是事件名的变量。
当用于普通元素,只监听原生DOM事件。当用于自定义元素组件,这监听子组件触发的自定义事件。
当监听原生DOM事件时,方法接收原生事件作为唯一参数。如果使用内联声明,声明可以访问一个特殊的$event
变量,v-on:click="handle('ok', $event)"
。
事件修饰符
在处理事件的时候调用event.preventDefault()
或者event.stopPropagation()
是很常见的。尽管我们可以直接在方法内部调用,但是如果方法能够更加专注于数据逻辑而不用去处理DOM事件的细节会更好。
为了解决这个问题,Vue为v-on
提供了事件修饰符。修饰符是用.
表示的指令后缀,包含以下这些:
.stop
.prevent
.self
.capture
.once
.passive
<!-- 单击事件将停止传递 --> |
.passive
修饰符一般用于触摸事件的监听器,可以用来改善移动端设备的滚屏性能。请勿同时使用.passive
和.prevent
,因为.passive
已经向浏览器表明了你不想阻止事件的默认行为。如果这么做了,则.prevent
会被忽略,并且浏览器会抛出警告。
其他的用法:
<!-- 修饰符可以使用链式调用 --> |
使用修饰符时需要注意调用顺序,因为相关代码是以相同的顺序生成的。因此使用
@click.prevent.self
会阻止元素及其子元素的所有点击事件的默认行为,而@click.self.prevent
则只会阻止对元素本身的点击事件的默认行为。
按键修饰符
在监听键盘事件时,我们经常需要检查特定的按键。Vue允许在监听按键事件时添加按键修饰符。
<!-- 仅在`key`为`Enter`时调用`submit`--> |
如果按键名是两个单词的,需要转为kebab-case的形式。如:
<!-- 仅会在$event.key为'PageDown'时调用事件处理 --> |
Vue给一些常用的按键提供了别名:
.enter
.tab
.delete
会捕获Delete和Backspace两个按键.esc
.space
.up
.down
.left
.right
系统按键修饰符
键盘上有一些特殊的系统按键供按下快捷键的时候使用,如复制为ctrl
+c
,在Mac上为cmd
+c
,如下:
.ctrl
.alt
.shift
.meta
在Mac上,
meta
为Command键,在Windows上,meta
为Win键。
<!-- Alt + Enter --> |
注意点:系统按键修饰符和常规按键不同,与
keyup
事件一起使用时,该按键必须在事件发出时候处于按下的状态。换句话说,keyup.ctrl
只会在你仍然按住ctrl
但松开了另一个键时被触发。若单独松开ctrl
键将不会触发。
.exact
修饰符
.exact
修饰符允许精确控制触发事件所需的系统修饰符的组合。
<!-- 当按下Ctrl的时候,即使按下Alt或Shift也会触发 --> |
鼠标按键修饰符
.left
.right
.middle
这些修饰符处理由鼠标按键触发的事件。
注意点,这里的
.left
、.right
和.middle
仅仅是名字叫这个,实际上指代的是“主”、“次”和“辅助”,而非具体的物理按键。因此,对于左手用鼠标布局而言,“主”按键在物理上可能是右边的按键,但却会触发.left
修饰符对应的处理程序。又或者触控板可能通过单指点击触发.left
处理程序,通过双指点击触发.right
处理程序,通过三指点击触发.middle
处理程序。同样,产生“鼠标”事件的其他设备和事件源,也可能具有与“左”,“右”完全无关的触发模式。