美文网首页
条件渲染

条件渲染

作者: 车在路上爬fly | 来源:发表于2020-12-09 17:21 被阅读0次

    \color{red}{v-if}

    v-if指令用于条件性的渲染一块内容,这部分内容只会在指令表达式返回true的时候被渲染。

    <div v-if="awesome">显示div</div>
    data() {
        return {
            awesome:true,
        }
    },
    

    也可以使用v-else添加一个else块:

    <div v-if="awesome">显示div</div>
    <div v-else>否则是这个</div>
    data() {
        return {
            awesome:true,
        }
    },
    
    \color{green}{\#}\color{red}{<template>}元素上使用\color{red}{<v-if>}条件渲染分组

    因为v-if是一个指令,所以必须将它添加到元素上。但是如果想切换多个元素?此时可以把一个<template>元素当做不可见的包裹元素,并在上面使用v-if。最终的渲染结果将不包含<template>元素。

    <block  v-if="awesome">
        <div>显示div</div>
    </block>
    data() {
        return {
            awesome:true,
        }
    },
    

    \color{green}{\#} \color{red}{v-else}

    可以使用v-else指令来表示v-if的else块:

    <div v-if="Math.random() > 0.5">
      妖鬼现形吧
    </div>
    <div v-else>
      千年老妖
    </div>
    

    v-else元素必须紧跟在带v-if或者v-else-if的元素后面,否则他将不会被识别。

    \color{green}{\#} \color{red}{v-else-if}

    v-else-if充当v-if的"else-if"块,可以连续使用:

    <div v-if="type === 'A'">
      A
    </div>
    <div v-else-if="type === 'B'">
      B
    </div>
    <div v-else-if="type === 'C'">
      C
    </div>
    <div v-else>
      Not A/B/C
    </div>
    

    类似于v-else,v-else-if也必须紧跟在带v-if或者v-else-if的元素之后。
     

    \color{green}{\#}\color{red}{key}管理可复用的元素

    Vue会复用已有元素而不是从头开始渲染,使得非常快之外还有一些其他好处。如:在不同登录方式之间切换:

    <template v-if="loginType === 'username'">
        <label>Username</label>
        <input placeholder="请输入用户名">
      </template>
      <template v-else>
        <label>Email</label>
        <input placeholder="请输入邮箱">
      </template>
      <button @click="changeLogin">切换登录</button>
    
    //逻辑处理
    data() {
      return {
            loginType:'username',
         }
      },
      methods:{
        changeLogin(){
            if(this.loginType === "username"){
                this.loginType = 'email';
            }else{
                this.loginType = 'username';
            }
        }
     }
    

    在上面的例子中:切换loginType不会清楚用户已经输入的内容。因为两个模板使用了相同的元素,<input>不会被替换掉——仅仅是替换了它的placeholder.

    这样是不符合实际要求的:所以vue提供了一种方式来表达“这两个元素是安全独立的,不要复用他们”。只需添加一个具有唯一值的key属性即可

    <template v-if="loginType === 'username'">
      <label>Username</label>
      <input placeholder="请输入用户名" key="username-input">
    </template>
    <template v-else>
      <label>Email</label>
      <input placeholder="请输入邮箱" key="email-input">
    </template>
    <button @click="changeLogin">切换登录</button>
    

    注意,<lable>元素仍然会被高效的复用,因为他没有key属性。

    \color{red}{v-show}

    另一个用于根据条件展示元素的选项是v-show指令。

    <div v-show="flag">是否显示</div>
    data() {
        return {
            flag:false,
        }
    },
    

    v-showv-if不同点:
    v-show修饰的元素始终会被渲染并保留在DOM中。只是简单的切换元素的css样式display
    v-if可以控制元素是否被渲染(而不是已经渲染之后,在控制隐藏状态)。

    \color{red}{注意:}v-show不支持<template>元素,也不支持v-else.

     

    \color{red}{v-if} vs \color{red}{v-show}

    v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。

    v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。

    相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。

    一般来说,v-if有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。

     

    \color{red}{v-if}\color{red}{v-for} 一起使用

    不推荐同时使用v-ifv-for

    v-ifv-for一起使用时,v-for具有比v-if更高的优先级。

    相关文章

      网友评论

          本文标题:条件渲染

          本文链接:https://www.haomeiwen.com/subject/anqhgktx.html