深入理解 Vue 的常用指令:从 v-text 到 v-slot

159 阅读4分钟

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 实例中的数据,当 isVisibletrue 时,元素会被渲染;当 isVisiblefalse 时,元素不会出现在 DOM 中。
  • v-if惰性渲染,即仅在条件为 true 时才会渲染该元素。

5. v-show

v-show 也用于条件渲染,与 v-if 类似,但它的原理不同。v-show 仅仅是通过设置元素的 CSS display 属性来控制元素的显示和隐藏,而不会从 DOM 中移除元素。

示例:

<div v-show="isVisible">该内容可见</div>
  • isVisible 是 Vue 实例中的数据,当 isVisibletrue 时,元素会显示;为 false 时,元素会隐藏。
  • 区别于 v-ifv-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 特性或属性值。它的简写是 :,可以用于动态绑定 hrefclassstyle 等。

示例:

<a v-bind:href="url">点击这里</a>
<!-- 或者简写 -->
<a :href="url">点击这里</a>
  • url 是 Vue 实例中的数据,v-bind:href 会将 url 的值动态绑定到 <a> 标签的 href 属性上。
  • 你也可以用 v-bind 来动态绑定 classstyle,如: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-textv-html 分别用于文本和 HTML 内容的插入。
  • v-on 用于事件监听,v-ifv-show 用于条件渲染。
  • v-for 用于遍历数组或对象,v-bind 用于动态绑定属性。
  • v-model 用于双向数据绑定,v-prev-cloak 用于优化渲染或控制编译过程。