Vue.js 提供了一些指令,用来简化开发中的常见操作。这些指令通常以 v- 前缀开头,用于在模板中应用某些特定的行为。学习Vue.js 中的常用指令,做一个记录,包含: v-text, v-html, v-on, v-if, v-show 等。
1. v-text
v-text 用于更新元素的 textContent,它会将指定的文本插入到元素内部,而不会触发 HTML 解析。简而言之,v-text 是在 DOM 元素中显示文本内容,类似于 {{ }} 插值语法,但它不会进行 HTML 渲染。
示例:
<div v-text="message"></div>
message是 Vue 实例中的数据,v-text会将message的内容作为文本显示在<div>中。- 如果
message是<strong>hello</strong>,则显示为纯文本"<strong>hello</strong>",而不是加粗文本。
2. v-html
v-html 用于将 HTML 内容插入到元素中。它允许你动态地渲染 HTML 标签,并且会解析 HTML 内容,允许嵌套 HTML 元素。
示例:
<div v-html="htmlContent"></div>
htmlContent是 Vue 实例中的数据,包含 HTML 代码。例如,htmlContent = '<strong>Hello</strong>'会在页面中渲染<strong>Hello</strong>,即显示为加粗文本。- 注意:使用
v-html时要小心 XSS(跨站脚本攻击),不要直接绑定用户输入的内容。
3. v-on
v-on 用于监听事件并绑定事件处理器。它的简写是 @,常用于处理用户的交互事件(如点击、鼠标悬停、输入等)。
示例:
<button v-on:click="handleClick">点击我</button>
<!-- 或者简写 -->
<button @click="handleClick">点击我</button>
handleClick是 Vue 实例中的方法,当按钮被点击时会执行该方法。- 你也可以监听其他类型的事件,如
@mouseover、@input等。
4. v-if
v-if 用于条件渲染,根据表达式的真假值来决定是否渲染元素。如果表达式的值为 true,则渲染该元素;如果为 false,则不渲染。
示例:
<div v-if="isVisible">该内容可见</div>
isVisible是 Vue 实例中的数据,当isVisible为true时,元素会被渲染;当isVisible为false时,元素不会出现在 DOM 中。v-if是 惰性渲染,即仅在条件为true时才会渲染该元素。
5. v-show
v-show 也用于条件渲染,与 v-if 类似,但它的原理不同。v-show 仅仅是通过设置元素的 CSS display 属性来控制元素的显示和隐藏,而不会从 DOM 中移除元素。
示例:
<div v-show="isVisible">该内容可见</div>
isVisible是 Vue 实例中的数据,当isVisible为true时,元素会显示;为false时,元素会隐藏。- 区别于
v-if:v-show是 切换显示状态,而v-if会完全销毁和重建 DOM 元素。
6. v-for
v-for 用于渲染一个列表,可以遍历数组或对象,生成对应的 DOM 元素。
示例:
<ul>
<li v-for="item in items" :key="item.id">{{ item.name }}</li>
</ul>
items是 Vue 实例中的数据,v-for会遍历items数组,并为每一项渲染一个<li>元素。:key="item.id"是为了优化渲染性能,在列表渲染时保持每个元素的身份。
7. v-bind
v-bind 用于动态绑定 HTML 特性或属性值。它的简写是 :,可以用于动态绑定 href、class、style 等。
示例:
<a v-bind:href="url">点击这里</a>
<!-- 或者简写 -->
<a :href="url">点击这里</a>
url是 Vue 实例中的数据,v-bind:href会将url的值动态绑定到<a>标签的href属性上。- 你也可以用
v-bind来动态绑定class和style,如:v-bind:class="classObject"和v-bind:style="styleObject"。
8. v-model
v-model 用于在表单控件上创建双向数据绑定,自动同步用户输入和数据。
示例:
<input v-model="message">
message是 Vue 实例中的数据,当用户在输入框中输入内容时,message会自动更新为输入框的值。
9. v-pre
v-pre 用于跳过这个元素和它的子元素的编译过程。这可以提升渲染性能,尤其是在某些需要大量静态内容的情况下。
示例:
<div v-pre>{{ this will not be compiled }}</div>
v-pre告诉 Vue 跳过这个元素及其子元素的模板编译,这样 Vue 就不会尝试解析它们。
10. v-cloak
v-cloak 是一个用于保持元素及其子元素的“未编译”状态,直到 Vue 完成编译。这常用于防止页面加载时看到模板语法。
示例:
<div v-cloak>{{ message }}</div>
- 使用
v-cloak时,Vue 会在元素被完全编译并附加到 DOM 后移除该属性。此时,页面不会显示{{ message }},而是显示经过编译后的内容。
11. v-slot
v-slot 是用来定义插槽的。插槽可以让你向组件传递内容,并在组件的特定位置渲染这些内容。
示例:
<template v-slot:default="slotProps">
<div>{{ slotProps.text }}</div>
</template>
v-slot允许父组件在子组件中指定一个插槽,并通过slotProps访问插槽传递的内容。
总结
v-text和v-html分别用于文本和 HTML 内容的插入。v-on用于事件监听,v-if和v-show用于条件渲染。v-for用于遍历数组或对象,v-bind用于动态绑定属性。v-model用于双向数据绑定,v-pre和v-cloak用于优化渲染或控制编译过程。