vue 条件渲染v-if和v-show

Vue.js 条件渲染常用的有两个指令:v-if 和 v-show。

v-if

v-if 实际上是 Vue.js 提供的一种结构性指令,通过判断表达式的值的真假来控制元素是否渲染到 DOM 中。

<div id="app">
  <h2 v-if="isVisible">Hello, Vue.js!</h2>
  <button @click="isVisible = !isVisible">
    Toggle visibility
  </button>
</div>

在上面的例子中,当变量 isVisible 的值为 true 时,<h2> 元素会被渲染到页面中。而当点击“Toggle visibility”这个按钮时,会触发 isVisible 变量的取反操作,从而实现了控制元素显示与隐藏的功能。

v-show

v-show 指令和 v-if 类似也可以用于对元素是否渲染的控制,但是它是通过改变元素的 CSS 的 display 属性值来实现元素的显示和隐藏。

<div id="app">
  <h2 v-show="isVisible">Hello, Vue.js!</h2>
  <button @click="isVisible = !isVisible">
    Toggle visibility
  </button>
</div>

在上面的例子中,当变量 isVisible 的值为 true 时,<h2> 元素不会从文档中移除,而是使用 display: none 隐藏。而当点击“Toggle visibility”这个按钮时,会触发 isVisible 变量的取反操作,从而实现了控制元素显示与隐藏的功能。

区别

两者的主要区别是:v-if 是在每次渲染前检查表达式的值,如果为 false,则元素不会被渲染。而 v-show 则无论表达式的值是 true 还是 false,元素始终会被渲染,只是使用 CSS 的 display 属性来实现显示和隐藏。

在实际使用中,v-if 和 v-show 的选择由以下因素决定:

  • 如果需要频繁切换元素的显示和隐藏,使用 v-show 可以获得更好的性能。
  • 如果元素初始状态是隐藏的,可以使用 v-if 进行延迟渲染,减轻页面加载负担。
  • 如果不需要频繁切换元素的显示和隐藏,并且初始状态已知,两个指令的差异就不大了。

下面是一个模拟登录表单的例子:

<div id="app">
  <form v-show="!isLoggedIn">
    <input type="text" placeholder="Username">
    <input type="password" placeholder="Password">
    <button @click.prevent="login">Login</button>
  </form>
  <p v-else>Welcome, {{ username }}!</p>
</div>

在上面的例子中,使用 v-show 来控制登录表单的显示和隐藏。当 isLoggedIn 的值为 false 时,表单会显示;当 isLoggedIn 的值为 true 时,表单会隐藏,替而使用 <p> 元素显示欢迎信息。

完整代码演示如下:

<!DOCTYPE html>
<html>
<head>
  <title>Vue 条件渲染v-if和v-show</title>
  <meta charset="UTF-8">
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    <h2 v-if="isVisible">Hello, Vue.js!</h2>
    <button @click="isVisible = !isVisible">
      Toggle visibility
    </button>
    <br>
    <h2 v-show="isVisible">Hello, Vue.js!</h2>
    <button @click="isVisible = !isVisible">
      Toggle visibility
    </button>
    <form v-show="!isLoggedIn">
      <input type="text" placeholder="Username" v-model="username">
      <input type="password" placeholder="Password" v-model="password">
      <button @click.prevent="login">Login</button>
    </form>
    <p v-else>Welcome, {{ username }}!</p>
  </div>

  <script>
    new Vue({
      el: '#app',
      data: {
        isVisible: true,
        isLoggedIn: false,
        username: '',
        password: ''
      },
      methods: {
        login() {
          if (this.username === 'admin' && this.password === '123456') {
            this.isLoggedIn = true;
          } else {
            alert('Invalid username or password!');
          }
        }
      }
    });
  </script>
</body>
</html>

在上面的例子中,在表单中填写正确的用户名和密码,点击“Login”按钮后,可以看到表单被隐藏,替而使用 <p> 元素显示欢迎信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue 条件渲染v-if和v-show - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue中使用setTimeout问题

    当在Vue组件中使用setTimeout函数时,需要注意以下几个问题: 1. setTimeout中的上下文 首先,需要注意的是setTimeout中的上下文(this指向)与Vue组件中的上下文不同。一般情况下,this指向的是window对象,而不是Vue组件实例。因此,在setTimeout函数中使用this可能会出现一些问题。 解决这个问题的方法是使…

    Vue 2023年5月29日
    00
  • 解决vue select当前value没有更新到vue对象属性的问题

    我将为您详细讲解“解决Vue Select当前Value没有更新到Vue对象属性的问题”的完整攻略。 简介 在Vue开发中,我们通常会使用Vue Select组件来实现下拉选择框。但是在使用过程中,会发现Vue Select的value属性不能够及时更新到Vue对象中的属性,导致无法实现数据的双向绑定。本文将为大家提供解决这个问题的完整攻略。 解决方案 解决…

    Vue 2023年5月28日
    00
  • JSON数组和JSON对象在vue中的获取方法

    当我们在Vue.js应用程序中使用数据时,经常需要从后端服务器获取JSON格式的数据并将其渲染到视图中。JSON(JavaScript Object Notation)是一种用于数据交换的轻量级数据格式。在Vue.js应用程序中,我们可以使用两种基本的JSON数据类型:JSON数组和JSON对象。 获取JSON数组 JSON数组是由多个JSON对象组成的元素…

    Vue 2023年5月27日
    00
  • Vue3根据动态字段绑定v-model的操作代码

    当我们需要根据动态字段进行v-model的绑定时,可以使用Vue3中的“v-model绑定到动态值”语法来完成,具体操作步骤如下: 在Vue组件中,定义一个data属性,例如:dynamicField和dynamicValue。其中,dynamicField表示需要动态绑定的字段名,dynamicValue用于存储该字段的值。 <template&gt…

    Vue 2023年5月28日
    00
  • Vue+Element的后台管理框架的整合实践

    下面我会根据题目需求,讲解“Vue+Element的后台管理框架的整合实践”的完整攻略,具体包括以下几个方面: Vue和Element的基本介绍和安装 Vue.js是一套用于构建用户界面的渐进式 JavaScript 框架,利用它可以实现单页面应用、组件化开发和数据驱动视图等功能。Element是一套基于 Vue 2.0 的桌面端组件库,它提供了一系列的 U…

    Vue 2023年5月27日
    00
  • Vue3 reactive响应式赋值页面不渲染的解决

    下面我将为你详细讲解“Vue3 reactive响应式赋值页面不渲染的解决”的完整攻略。 问题描述 在Vue3中,我们可以使用reactive响应式编程,对数据进行监听,当数据发生改变时,页面会自动重新渲染。但有时候在赋值时,页面却没有发生渲染,这是一个常见的问题。 解决方案 方案一:使用toRefs Vue3中的reactive返回的对象是一个Proxy,…

    Vue 2023年5月27日
    00
  • Vue手把手教你撸一个 beforeEnter 钩子函数

    首先我们来介绍一下Vue的导航守卫和beforeEnter钩子函数。 Vue是一个具有完善导航功能的框架,而在Vue路由中,我们可以定义许多导航守卫,包括beforeEach、beforeResolve、afterEach等等。每个导航守卫都有自己的用途,beforeEach在跳转路由之前进行拦截,beforeResolve在路由解析时进行拦截,而after…

    Vue 2023年5月28日
    00
  • vue之监听器的使用案例详解

    Vue之监听器的使用案例详解 在Vue中,我们可以使用监听器来监听数据的变化并且进行处理。在这篇文章中,我们将详细讲解Vue中监听器的使用方法,以及提供一些使用案例。 前置知识 在阅读本文之前,请确保您已经掌握以下知识: Vue的基本语法和API 数据绑定和计算属性的使用方法 监听器的基本使用 在Vue中,我们可以使用watch选项来定义一个监听器。同时,我…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部