vue指令知识点
模板和指令
- 模板语法有两种
- a. 插值语法:
{{x}}, 用于解析标签体内容, 其中 x 为vm(mvvm)实例对象上可以直接访问的属性, 这些数据通过数据代理的形式(_data)确保 vm 可以进行访问. 注意, 插值语法中可以 data 或者 methods 等等任何数据. - b. 指令语法: v-CMD, 例如 v-bind, v-on, v-html 等
注意, 插值语法作用于标签体, 而指令语法则在标签属性中生效.
- v-bind 表示数据的单向绑定, 从
data --> 模板, 其缩写语法为: “:KEY”, 一旦使用 v-bind 指定某个值, 则表示当前标签上已经有某一个 KEY 属性了, 例如:<li :bamboo="3"></li>在渲染之后, li 标签上将有一个 bamboo 属性. 这一点非常重要, 这个非常有助于后续第三方组件或者自定义组件中的关键字段传值:
1 | <component :key1="1" :key2="2" ...></component> |
关于双向绑定指令, 见下章说明.
v-model 指令
v-model 表示数据的双向绑定, 其仅仅作用于已经默认存在”value”属性的标签, 故 v-model 一般用于 Form 表单中:
<input>标签:用于文本输入、复选框、单选按钮等表单元素
a. 文本输入: <input type="text" v-model="username">
b. 密码输入: <input type="password" v-model="password">
c. 数字输入: <input type="number" v-model="number">
d. 单选按钮(radio):
1 | <input type="radio" value="option1" v-model="selectedOption" /> |
e. 复选框(checkbox)
1 | <input type="checkbox" value="option1" v-model="selectedOptions" /> |
其中 selectOptions 值为 value 对应的值的时候会自动设置 checkbox 为 true.
<textarea>标签:用于多行文本输入
1 | <textarea v-model="message"></textarea> |
<select>标签:用于选择列表中的选项
1 | <select v-model="selectedOption"> |
除此之外, 还可以在存在”value”属性的自定义标签中使用双向绑定, 这点非常重要.
v-on 指令
v-on表示事件监听器, 用于响应用户的交互操作, 其缩写语法为: @EVENT.modifiers, 其中 EVENT 就是 JS 中常见的各种事件, modifers 表示各种事件修饰符.
各类常用事件
- click: 鼠标点击事件 示例:
<button @click="handleClick">点击我</button> - keydown: 键盘按下事件 示例:
<input @keydown="handleKeyDown"> - keyup: 键盘释放事件 示例:
<input @keyup="handleKeyUp"> - keypress: 键盘按键事件 示例:
<input @keypress="handleKeyPress"> - input: 输入事件 示例:
<input @input="handleInput"> - change: 值变化事件 示例:
<input @change="handleChange"> - mousemove: 鼠标移动事件 示例:
<div @mousemove="handleMouseMove"> - mouseover: 鼠标悬停事件 示例:
<div @mouseover="handleMouseOver"> - mouseout: 鼠标离开事件 示例:
<div @mouseout="handleMouseOut"> - mousedown: 鼠标按下事件 示例:
<button @mousedown="handleMouseDown">按下我</button> - mouseup: 鼠标释放事件 示例:
<button @mouseup="handleMouseUp">释放我</button> - scroll: 滚动事件 示例:
<div @scroll="handleScroll"> - dblclick: 双击事件 示例:
<button @dblclick="handleDoubleClick">双击我</button> - submit: 表单提交事件 示例:
<form @submit="handleSubmit"> - load: 资源加载事件 示例:
<img src="image.jpg" @load="handleImageLoad"> - error: 资源加载错误事件 示例:
<img src="image.jpg" @error="handleImageError">
事件修饰符
- 常用事件修饰符
- stop: 阻止事件冒泡, 例如
@click.stop="handleClick" - prevent: 阻止事件默认行为, 例如 form 表单提交后刷新页面,
@submit.prevent="handleSubmit" - once: 仅仅执行一次事件处理, 例如
@click.once="handleClick" - capture: 使用事件捕获模式(事件从顶层向下传播到目标)而不是冒泡模式(事件从目标向外传递), 例如
@focus.capture="handleFocus" - self: 只在事件目标自身触发时才执行事件处理程序, 例如
@click.self="handleClick" - passive: 指示事件处理程序不会调用
event.preventDefault(), 无需等待回调程序执行完成 - native: 监听组件根元素的原生事件, 例如
@input.native="handleInput"
- 键盘和鼠标事件修饰符
- keyCode: 只在特定按键被按下时才触发事件处理程序, 例如
@keydown.enter="handleEnterKey" - exact: 要求事件的修饰键必须精确匹配, 例如
@keydown.exact="handleExactMatch" - left,right, middle: 特定鼠标按钮被点击时触发事件处理程序, 例如
@mousedown.left="handleLeftClick"
- 关于passive修饰符
这里需要作进一步的说明, 其主要用于优化滚动性能, 即addEventListener方法中的滚动事件. 首先, 默认情况下滚动事件处理程序中会调用 event.preventDefault() 方法来阻止默认的滚动行为, 这样可以达到如下目的: 在滚动过程中禁止页面的滚动或阻止某些元素的滚动, 但是这里有如下问题:
- a. 滚动事件的监听是在主线程上执行
- b. 阻止默认行为需要等待主线程的处理完成, 这里会有一定的延迟
为了提高流畅度, 通过passive来告知浏览器不会调用event.preventDefault() , 从而让浏览器做更多的优化以提高体验, 当然, 这一切的前提不会影响到需要阻止默认行为的滚动场景.
1 | element.addEventListener('scroll', handleScroll, { passive: true }); |
键盘事件
- 常用按键说明
- enter: 回车键,例如:
<input @keydown.enter="handleEnterKey"> - tab: Tab键,例如:
<input @keydown.tab="handleTabKey"> - delete: 删除键,例如:
<input @keydown.delete="handleDeleteKey"> - space: 空格键,例如:
<button @keydown.space="handleSpaceKey">按下空格键</button> - esc: Esc键,例如:
<div @keydown.esc="handleEscapeKey">按下Esc键</div> - up: 上箭头键,例如:
<input @keydown.up="handleUpArrowKey"> - down: 下箭头键,例如:
<input @keydown.down="handleDownArrowKey"> - left: 左箭头键,例如:
<input @keydown.left="handleLeftArrowKey"> - right: 右箭头键,例如:
<input @keydown.right="handleRightArrowKey"> - home: Home键,例如:
<input @keydown.home="handleHomeKey"> - end: End键,例如:
<input @keydown.end="handleEndKey"> - pageup: Page Up键,例如:
<input @keydown.pageup="handlePageUpKey"> - pagedown: Page Down键,例如:
<input @keydown.pagedown="handlePageDownKey"> - ctrl: Ctrl键,例如:
<input @keydown.ctrl="handleCtrlKey"> - alt: Alt键,例如:
<input @keydown.alt="handleAltKey"> - shift: Shift键,例如:
<input @keydown.shift="handleShiftKey"> - meta: Meta键 (通常是Command键或Windows键),例如:
<input @keydown.meta="handleMetaKey">
- 系统修饰键
- .ctrl: Ctrl系统按键。示例:
<input @keydown.ctrl.y="handleY">(当同时按下Ctrl键和字母”Y”时触发,常用于撤销操作) - .alt: Alt系统按键。示例:
<input @keydown.alt.f4="handleAltF4">(当同时按下Alt键和F4键时触发,常用于关闭窗口) - .shift: Shift系统按键。示例:
<input @keydown.shift.tab="handleShiftTab">(当同时按下Shift键和Tab键时触发,常用于向前切换焦点) - .meta: Meta系统按键(通常是Command键或Windows键)。示例:
<input @keydown.meta.s="handleMetaS">(当同时按下Meta键和字母”S”时触发,常用于保存操作)
其他指令
- 常用但是容易记忆的指令
v-if: 条件渲染, 根据条件来渲染和销毁元素, 例如<div v-if="isVisible">Visible content</div>v-for: 列表渲染, 例如<ul><li v-for="item in items">{{ item }}</li></ul>v-show: 根据条件来显示或隐藏元素, 其原理是通过改变 display 来实现, 例如:<div v-show="isVisible">Visible content</div>v-text: 更新元素的文本内容,将指定的数据值动态地渲染为文本, 例如:<span v-text="message"></span>, 注意, 其仅仅会将数据渲染为纯文本v-html: 输出 HTML 片段到元素中,可以渲染 HTML 结构, 例如:<div v-html="htmlContent"></div>, 注意, 其会渲染 HTML 数据
- 不常用指令
v-cloak: 用于在 Vue 实例编译完成前隐藏未编译的模板内容,通常与 CSS 配合使用, 例如:<div v-cloak>{{ message }}</div>, 在编译完成前不渲染 messagev-pre: 用于跳过 Vue 实例编译过程中的指定元素,不进行数据绑定和编译, 例如:<pre v-pre>{{ message }}</pre>v-once: 指令所在的元素和组件只渲染一次,不再响应数据的变化, 例如:<span v-once>{{ message }}</span>, 这个功能同时间修饰符.once类似
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 狂想写作本!
评论



