当前位置:首页 > VUE

vue 实现vshow

2026-01-13 06:24:26VUE

Vue 实现 v-show 指令

Vue 的 v-show 指令通过控制元素的 display CSS 属性来实现显示和隐藏。与 v-if 不同,v-show 不会移除 DOM 元素,而是通过样式切换。

vue 实现vshow

基本用法

<template>
  <div>
    <button @click="toggleVisibility">Toggle Visibility</button>
    <div v-show="isVisible">This element is visible</div>
  </div>
</template>

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

实现原理

v-show 的核心逻辑是根据表达式的值动态设置元素的 display 样式:

  • 当表达式为 true 时,元素显示(display 设置为原始值,如 blockinline 等)。
  • 当表达式为 false 时,元素隐藏(display: none)。

自定义 v-show

可以通过自定义指令实现类似 v-show 的功能:

<template>
  <div v-custom-show="isVisible">Custom v-show</div>
</template>

<script>
export default {
  directives: {
    'custom-show': {
      bind(el, binding) {
        el.style.display = binding.value ? '' : 'none';
      },
      update(el, binding) {
        el.style.display = binding.value ? '' : 'none';
      }
    }
  },
  data() {
    return {
      isVisible: true
    };
  }
};
</script>

与 v-if 的区别

  • v-show:仅切换 display 样式,DOM 元素始终保留。适合频繁切换的场景。
  • v-if:条件为 false 时会销毁 DOM 元素,条件为 true 时重新创建。适合不频繁切换的场景。

性能考虑

  • 频繁切换显示状态时,v-show 性能更好,因为避免了 DOM 的频繁销毁和重建。
  • 初始渲染成本较高时,v-if 更高效,因为可以跳过不必要的 DOM 渲染。

vue 实现vshow

标签: vuevshow
分享给朋友:

相关文章

vue实现单词反转

vue实现单词反转

实现思路 在Vue中实现单词反转功能,可以通过多种方式完成。核心思路是利用JavaScript的字符串处理方法,将输入的单词或句子拆分为数组,反转数组后再拼接成字符串。 方法一:使用计算属性 通过…

vue实现年历

vue实现年历

Vue 实现年历的方法 使用 Vue 实现年历可以通过组件化开发方式,结合日期计算和动态渲染完成。以下是两种常见的实现方式: 基于原生 Vue 的日历组件 创建 Calendar.vue 组件文件…

vue实现购物按钮

vue实现购物按钮

Vue 购物按钮实现方法 基础按钮实现 使用 Vue 的模板语法创建基础按钮组件,绑定点击事件处理购物逻辑: <template> <button @click="addToC…

前端vue登录功能实现

前端vue登录功能实现

Vue 登录功能实现步骤 创建登录表单组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含用户名和密码输入框以及提交按钮。 <template> &…

课程表vue实现

课程表vue实现

实现课程表的Vue组件 创建课程表需要设计数据结构、布局和交互逻辑。以下是一个基于Vue 3的实现方案: 数据结构设计 const timetableData = ref([ {…

vue查看更多怎么实现

vue查看更多怎么实现

实现 Vue 的“查看更多”功能 数据截取与显示控制 通过 v-if 或 v-show 控制内容的显示与隐藏。初始状态下只显示部分内容,点击“查看更多”后展开完整内容。 <template&g…