zoukankan      html  css  js  c++  java
  • vue之条件判断v-if与v-show

    1.背景

    2.v-if简单使用

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
      <!-- 开发环境版本,包含了有帮助的命令行警告 -->
      <!-- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>-->
      <script src="./js/vue.js"></script>
    </head>
    <body>
    <div id="app">
      <h3>{{title}}</h3>
      <pre>
        v-if的原理:
        v-if后面的条件为false时,对应的元素以及其子元素不会渲染。
        也就是根本没有不会有对应的标签出现在DOM中。
      </pre>
      <hr>
      当前分数为:{{number}}
      <br>
      分数等级为:
      <p v-if="number>=90">A</p>
      <p v-else-if="number>=80">B</p>
      <p v-else-if="number>=70">C</p>
      <p v-else-if="number>=60">D</p>
      <p v-else>E</p>
    
    </div>
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          title: '条件判断-if使用',
          name: 'ldp',
          number: 60
        }
      });
    </script>
    </body>
    </html>
    View Code

    3.v-if实现切换账号登录类型

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
      <!-- 开发环境版本,包含了有帮助的命令行警告 -->
      <!-- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>-->
      <script src="./js/vue.js"></script>
    </head>
    <body>
    <div id="app">
      <h3>{{title}}</h3>
      <pre>
       需求:
        假设做一个登录页面
        默认使用微信登录,点击切换按钮,可以使用QQ登录
      </pre>
      <hr>
      <div>
        <span v-if="type==='QQ'">
          <label>QQ号:</label>
          <input placeholder="请输入QQ账号">
        </span>
        <span v-else>
          <label>微信号:</label>
          <input placeholder="请输入微信号">
        </span>
        <button @click="changeType">账号类型切换</button>
      </div>
      <hr>
      <div>
        <pre>
    1.问题:
    如果我们在有输入内容的情况下,切换了类型,我们会发现文字依然显示之前的输入的内容。
    但是按道理讲,我们应该切换到另外一个input元素中了。
    在另一个input元素中,我们并没有输入内容。
    为什么会出现这个问题呢?
    
    2.原因:
    这是因为Vue在进行DOM渲染时,出于性能考虑,会尽可能的复用已经存在的元素,而不是重新创建新的元素。
    在上面的案例中,Vue内部会发现原来的input元素不再使用,直接作为else中的input来使用了。
    
    3.解决方案:
    如果我们不希望Vue出现类似重复利用的问题,可以给对应的input添加key
    并且我们需要保证key的不同
        </pre>
      </div>
      <hr>
      <div>
        <span v-if="type==='QQ'">
          <label>QQ号:</label>
          <input placeholder="请输入QQ账号" key="qq-input">
        </span>
        <span v-else>
          <label>微信号:</label>
          <input placeholder="请输入微信号" key="wx-input">
        </span>
        <button @click="changeType">账号类型切换</button>
      </div>
    </div>
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          title: '条件判断-if实现账号登录切换',
          name: 'ldp',
          type: 'QQ'
        },
        methods: {
          changeType() {
            this.type = this.type === 'QQ' ? 'WX' : 'QQ'
          }
        }
      });
    </script>
    </body>
    </html>
    View Code

    4.v-if与v-show的区别

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
      <!-- 开发环境版本,包含了有帮助的命令行警告 -->
      <!-- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>-->
      <script src="./js/vue.js"></script>
    </head>
    <body>
    <div id="app">
      <h3>{{title}}</h3>
      <pre>
    v-show的用法和v-if非常相似,也用于决定一个元素是否渲染:
    
    v-if和v-show对比
    v-if和v-show都可以决定一个元素是否渲染,那么开发中我们如何选择呢?
    v-if当条件为false时,压根不会有对应的元素在DOM中。
    v-show当条件为false时,仅仅是将元素的display属性设置为none而已。
    
    开发中如何选择呢?
    当需要在显示与隐藏之间切片很频繁时,使用v-show
    当只有一次切换时,通过使用v-if
      </pre>
      <hr>
      <div>
        <span v-show="showQQ">
          <label>QQ号:</label>
          <input placeholder="请输入QQ账号">
        </span>
        <span v-show="!showQQ">
          <label>微信号:</label>
          <input placeholder="请输入微信号">
        </span>
        <button @click="changeType">账号类型切换</button>
      </div>
    
    </div>
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          title: '条件判断v-show与if的区别',
          name: 'ldp',
          showQQ: true
        },
        methods: {
          changeType() {
            this.showQQ = this.showQQ ? false : true
          }
        }
      });
    </script>
    </body>
    </html>
    View Code

    完美!

  • 相关阅读:
    window系统中,解决Pycharm 文件更改目录后,执行路径未更新问题(转)
    yum安装软件报错–skip-broken(卸载的时候一直报错:未安装软件包)
    selenium之Chrome浏览器与chromedriver对应关系和下载
    Python 第三方库 批量下载安装包,离线批量安装Python第三方库
    UIpath 循环读取IMAP邮件,并保存附件
    UIpath 中如何使用 正则表达式
    用python实现队列,堆栈
    python-反射
    Python基础-父类对子类的约束
    Python基础-类的继承顺序
  • 原文地址:https://www.cnblogs.com/newAndHui/p/13830396.html
Copyright © 2011-2022 走看看