指令v-show和v-if

v-show

v-show是Vue.js中的一个指令,用于根据表达式的值来控制元素的显示与隐藏。当表达式的值为真时,元素会被显示出来;当表达式的值为假时,元素会被隐藏起来。

v-show的语法格式如下:

v-show="表达式"

下面是v-show的详细解析与代码实例:

  1. 在元素上使用v-show指令
<div v-show="isShow">这是一个元素</div>

以上代码中,isShow是一个在Vue实例中定义的布尔类型的数据,用来控制元素的显示与隐藏。

  1. 使用v-show控制列表的显示与隐藏
<ul>
  <li v-for="item in itemList" v-show="item.visible">{{ item.name }}</li>
</ul>

以上代码中,itemList是一个在Vue实例中定义的数组,其中的每个元素都包含一个visible属性,用来控制每个列表项的显示与隐藏。

  1. 使用v-show条件判断
<div v-show="score >= 60">及格</div>
<div v-show="score < 60">不及格</div>

以上代码中,score是一个在Vue实例中定义的数据,根据score的值来判断元素的显示与隐藏。

需要注意的是,v-show只是控制元素的display属性,当元素被隐藏时,它仍然占据页面的空间,并没有从DOM中移除。

v-show和v-if的区别:

  • v-show是通过修改元素的display属性来控制显示与隐藏,隐藏的元素仍然占据空间;
  • v-if是通过添加或移除元素来控制显示与隐藏,隐藏的元素不再占据空间。

因此,如果需要频繁切换元素的显示与隐藏,可以使用v-show;如果需要根据条件动态添加或移除元素,可以使用v-if。

v-if

v-if 是 Vue.js 提供的一个指令,用于根据条件来进行条件渲染。它的用法如下:

<template>
  <div>
    <p v-if="isShow">显示内容</p>
    <p v-else>隐藏内容</p>
  </div>
</template>

isShow 的值为 true 时,渲染 &lt;p>显示内容&lt;/p>;当 isShow 的值为 false 时,渲染 &lt;p>隐藏内容&lt;/p>

v-if 的详细解析如下:

  1. 如果 v-if 的值为真,则渲染该元素;如果 v-if 的值为假,则不渲染该元素。
  2. v-if 支持在同一个元素上使用 v-elsev-else-if,表示在 v-if 的条件不满足时渲染。
  3. v-if 是惰性的,即只有在条件满足时才会进行渲染。如果初始条件为假,则不会渲染元素,直到条件变为真时才会进行渲染。
  4. v-if 可以和 v-elsev-else-ifv-show 一起使用。
  5. v-if 可以用在标签上,也可以用在组件上。

代码实例:

<template>
  <div>
    <button @click="toggle">切换显示</button>
    <p v-if="isShow">显示内容</p>
    <p v-else>隐藏内容</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isShow: true
    }
  },
  methods: {
    toggle() {
      this.isShow = !this.isShow;
    }
  }
}
</script>

在上面的代码中,点击按钮会切换 isShow 的值,从而改变显示内容和隐藏内容的渲染状态。

### Vue 中 `v-if` 与 `v-show` 的区别及使用场景 #### 一、条件渲染方式 `v-if` `v-show` 都是 Vue 提供的条件渲染指令,但它们的实现机制完全不同。 - **`v-if`**:真正的条件渲染,当条件为 `false` 时,元素及其内部的 Vue 组件会被完全销毁,且不会挂载到 DOM 中[^3]。这意味着,当条件重新变为 `true` 时,DOM 元素及其子组件会被重新创建并挂载到 DOM 上[^4]。 - **`v-show`**:通过简单的 CSS 属性控制显示或隐藏,无论条件为 `true` 或 `false`,元素始终存在于 DOM 中,只是通过设置 `display: none` 来隐藏元素[^3]。 #### 二、性能比较 - **初始渲染开销**: - `v-if` 在条件为 `false` 时不会进行任何渲染,因此在初始阶段没有额外开销[^4]。 - `v-show` 不论条件真假,都会渲染到 DOM 中,因此初始渲染开销较大[^4]。 - **切换开销**: - `v-if` 每次切换条件时需要销毁重建 DOM 元素及其子组件,这会导致较高的性能开销,尤其是在频繁切换的情况下[^4]。 - `v-show` 切换时仅修改 CSS 样式属性,性能消耗较低,适合频繁切换显示状态的场景[^4]。 #### 三、使用场景选择 - **`v-if` 的适用场景**: - 当运行时条件很少改变时,可以选择 `v-if`,因为它可以节省不必要的 DOM 开销。 - 当需要完全销毁重建组件(例如权限控制、动态表单字段)时,`v-if` 是更合适的选择[^3]。 - 如果需要减少初始渲染开销(例如初始隐藏的复杂组件),优先使用 `v-if`。 - **`v-show` 的适用场景**: - 当需要频繁切换显示/隐藏状态(例如选项卡切换、折叠面板)时,`v-show` 更高效[^4]。 - 如果希望保留元素的状态(例如表单输入框的缓存值),`v-show` 是更好的选择[^3]。 #### 四、示例代码 以下是一个对比 `v-if` `v-show` 的简单示例: ```html <template> <div> <button @click="toggle">切换显示</button> <!-- v-show 示例 --> <div> <h3>v-show 示例</h3> <input v-show="isVisible" v-model="showValue" placeholder="v-show输入框"> <p>当前值: {{ showValue }}</p> </div> <!-- v-if 示例 --> <div> <h3>v-if 示例</h3> <input v-if="isVisible" v-model="ifValue" placeholder="v-if输入框"> <p>当前值: {{ ifValue }}</p> </div> </div> </template> <script> export default { data() { return { isVisible: true, showValue: '', ifValue: '' }; }, methods: { toggle() { this.isVisible = !this.isVisible; } } }; </script> ``` 在这个示例中: - 当点击按钮切换 `isVisible` 状态时,`v-show` 的输入框会保留之前的值[^1]。 - 而 `v-if` 的输入框在条件为 `false` 时被销毁,再次显示时会重新创建,导致之前的值丢失[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ordinary90

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值