Vue基础指令
插值语法
通过Mustache语法,让vue实例的数据data,显示在页面当中
双大括号会将数据解释为普通文本,而非 HTML 代码
1 | <span>Message: {{ msg }}</span> |
使用 JavaScript 表达式
迄今为止,在我们的模板中,我们一直都只绑定简单的 property 键值。但实际上,对于所有的数据绑定,Vue.js 都提供了完全的 JavaScript 表达式支持。
1 | {{ number + 1 }} |
内置指令
1 | <!-- |
v-once
组件绑定v-once
,该组件只会解析一次插值语法,之后改变data数据,也不会影响界面数据
只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。
1 | <div id="app"> |
v-html
在vue实例中的data直接使用HTML标签,是无法通过mustache语法解析出来,但是给组件绑定v-html
让该组件解析html标签
在网站上动态渲染任意 HTML 是非常危险的,因为容易导致 XSS 攻击。只在可信内容上使用
v-html
,永不用在用户提交的内容上。
1 | <!-- |
v-text
不需要使用mustache语法显示数据,直接通过v-text="message"
绑定数据。缺点明显,不灵活
1 | <span v-text="msg"></span> |
v-pre
原封不动的解析标签内容,不解析mustache语法
当不需要使用插值语法或指令,可以使用 v-pre
去跳过Vue解析它,加快解析过程
1 | <h2 v-pre>{{message}}</h2> <!--结果: {{message}}--> |
v-cloak
当vue未解析的时候,htmlDOM提前解析了,展现的内容对用户 不友好,给组件添加v-bloak,当没有解析的时候,通过css样式隐藏
1 | <div v-cloak>{{ message }}</div> |
1 | /*css添加该属性的样式,去隐藏*/ |
v-show
根据表达式的真假值,切换元素的 display
CSS 属性。
1 | <h1 v-show="true">Hello!</h1> |
v-on
缩写:
@
预期:
Function | Inline Statement | Object
参数:
event
修饰符:
.stop
- 调用event.stopPropagation()
。.prevent
- 调用event.preventDefault()
。.capture
- 添加事件侦听器时使用 capture 模式。.self
- 只当事件是从侦听器绑定的元素本身触发时才触发回调。.{keyAlias}
- 仅当事件是从特定键触发时才触发回调。.once
- 只触发一次回调。.left
- 只当点击鼠标左键时触发。.right
- 只当点击鼠标右键时触发。.middle
- 只当点击鼠标中键时触发。.passive
-{ passive: true }
模式添加侦听器
用法:
绑定事件监听器。事件类型由参数指定。表达式可以是一个方法的名字或一个内联语句,如果没有修饰符也可以省略。
用在普通元素上时,只能监听原生 DOM 事件。用在自定义元素组件上时,也可以监听子组件触发的自定义事件。
监听原生 DOM 事件时,方法以事件为唯一的参数。如果使用内联语句,语句可以访问一个
$event
property:v-on:click="handle('ok', $event)"
。v-on
同样支持不带参数绑定一个事件/监听器键值对的对象。注意当使用对象语法时,是不支持任何修饰器的。
1 | <!-- 方法处理器 --> |
在子组件上监听自定义事件 (当子组件触发“my-event”时将调用事件处理器):
1 | <my-component @my-event="handleThis"></my-component> |
v-bind
缩写:
:
预期:
any (with argument) | Object (without argument)
参数:
attrOrProp (optional)
修饰符:
.camel
- 将 kebab-case attribute 名转换为 camelCase。
用法:
动态地绑定一个或多个 attribute,或一个组件 prop 到表达式。
在绑定
class
或style
attribute 时,支持其它类型的值,如数组或对象。可以通过下面的教程链接查看详情。在绑定 prop 时,prop 必须在子组件中声明。可以用修饰符指定不同的绑定类型。
没有参数时,可以绑定到一个包含键值对的对象。注意此时
class
和style
绑定不支持数组和对象。示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35<!-- 绑定 attribute -->
<img v-bind:src="imageSrc" />
<!-- 动态 attribute 名 -->
<button v-bind:[key]="value"></button>
<!-- 缩写 -->
<img :src="imageSrc" />
<!-- 动态 attribute 名缩写 -->
<button :[key]="value"></button>
<!-- 内联字符串拼接 -->
<img :src="'/path/to/images/' + fileName" />
<!-- class 绑定 -->
<div :class="{ red: isRed }"></div>
<div :class="[classA, classB]"></div>
<div :class="[classA, { classB: isB, classC: isC }]">
<!-- style 绑定 -->
<div :style="{ fontSize: size + 'px' }"></div>
<div :style="[styleObjectA, styleObjectB]"></div>
<!-- 绑定一个全是 attribute 的对象 -->
<div v-bind="{ id: someProp, 'other-attr': otherProp }"></div>
<!-- prop 绑定。"prop" 必须在 my-component 声明 -->
<my-component :prop="someThing"></my-component>
<!-- 通过 $props 将父组件的 props 一起传给子组件 -->
<child-component v-bind="$props"></child-component>
<!-- XLink -->
<svg><a :xlink:special="foo"></a></svg>
</div>.camel
修饰符允许在使用 DOM 模板时将v-bind
property 名称驼峰化,例如 SVG 的viewBox
property:1
<svg :view-box.camel="viewBox"></svg>
在使用字符串模板或通过
vue-loader
/vueify
编译时,无需使用.camel
。参考:
#v-model
预期:随表单控件类型不同而不同。
限制于:
<input>
<select>
<textarea>
- components
修饰符:
用法:
在表单控件或者组件上创建双向绑定。细节请看下面的教程链接。
参考:
#v-slot
缩写:
#
预期:可放置在函数参数位置的 JavaScript 表达式 (在支持的环境下可使用解构)。可选,即只需要在为插槽传入 prop 的时候使用。
参数:插槽名 (可选,默认值是
default
)限用于:
<template>
- 组件 (对于一个单独的带 prop 的默认插槽)
用法:
提供具名插槽或需要接收 prop 的插槽。
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28<!-- 具名插槽 -->
<base-layout>
<template v-slot:header>
Header content
</template>
<template v-slot:default>
Default slot content
</template>
<template v-slot:footer>
Footer content
</template>
</base-layout>
<!-- 接收 prop 的具名插槽 -->
<infinite-scroll>
<template v-slot:item="slotProps">
<div class="item">
{{ slotProps.item.text }}
</div>
</template>
</infinite-scroll>
<!-- 接收 prop 的默认插槽,使用了解构 -->
<mouse-position v-slot="{ x, y }">
Mouse position: {{ x }}, {{ y }}
</mouse-position>
自定义指令
1.局部自定义指令
1 | <!-- |
2.全局自定义指令
1 | /* |
自定义指令总结:
一、配置对象中常用的3个回调:
(1).bind:指令与元素成功绑定时调用。
(2).inserted:指令所在元素被插入页面时调用。
(3).update:指令所在模板结构被重新解析时调用。
二、注意:
1.指令定义时不加v-
,但使用时要加v-
;
2.指令名如果是多个单词,要使用kebab-case
命名方式,不要用camelCase
命名。