條件渲染指令

v-if, v-else-if, v-else
與 JavaScript 的條件語句 if, else, else if 類似,Vue.js 的條件指令可以根據(jù)表達式的值在DOM中渲染或銷毀元素/組件,例如:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>示例</title>

</head>
<body>

    <div id="app">
        <p v-if="status === 1">當 status 為1時顯示該行</p>
        <p v-else-if="status === 2">當 status 為2時顯示該行</p>
        <p v-else>否則顯示該行</p>
    </div>

    <script src="https://unpkg.com/vue/dist/vue.min.js"></script>

    <script>

        var app = new Vue({
            el: '#app',
            data: {
                status: 1
            }
            
        })

    </script>

</body>
</html>

v-else-if 要緊跟 v-if, v-else 要緊跟v-else-if 或 v-if,表達式的值為真時,當前元素/組件及所有子節(jié)點將被渲染, 未假時被移除. 如果一次判斷的是多個元素, 可以在 Vue.js 內(nèi)置的 <template>元素上使用條件指令,最終渲染的結(jié)果不會包含該元素,例如:


<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>示例</title>

</head>
<body>

    <div id="app">
        <temolate v-if="status === 1">
            <p>這是一段文本</p>
            <p>這是一段文本</p>
            <p>這是一段文本</p>
        </temolate>
        
    </div>

    <script src="https://unpkg.com/vue/dist/vue.min.js"></script>

    <script>

        var app = new Vue({
            el: '#app',
            data: {
                status: 1
            }
            
        });

    </script>

</body>
</html>

Vue 在渲染元素時,由于效率考慮,會盡可能地復(fù)用已有的元素而非常新渲染,比如下面的示例:


<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>示例</title>

</head>
<body>

    <div id="app">
        <template v-if="type === 'name'">
            <label>用戶名:</label>
            <input placeholder="輸入用戶名">
        </template>
        <template v-else>
            <label>郵箱:</label>
            <input placeholder="輸入郵箱">
        </template>
        <button @click="handleToggleClick">切換輸入類型</button>
    </div>

    <script src="https://unpkg.com/vue/dist/vue.min.js"></script>

    <script>

        var app = new Vue({
            el: '#app',
            data: {
                type: 'name'
            },
            methods: {
                handleToggleClick: function () {
                    this.type = this.type === 'name' ? 'mail' : 'name';
                }
            }
            
        });

    </script>

</body>
</html>

如果你不希望這樣做,可以使用 Vue.js 提供的屬性 key 屬性,他可以讓你自己決定是否要復(fù)用元素, key 的值必須是唯一的,例如:


<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>示例</title>

</head>
<body>

    <div id="app">
        <template v-if="type === 'name'">
            <label>用戶名:</label>
            <input placeholder="輸入用戶名" key="name-input">
        </template>
        <template v-else>
            <label>郵箱:</label>
            <input placeholder="輸入郵箱" key="name-input">
        </template>
        <button @click="handleToggleClick">切換輸入類型</button>
    </div>

    <script src="https://unpkg.com/vue/dist/vue.min.js"></script>

    <script>

        var app = new Vue({
            el: '#app',
            data: {
                type: 'name'
            },
            methods: {
                handleToggleClick: function () {
                    this.type = this.type === 'name' ? 'mail' : 'name';
                }
            }
            
        });

    </script>

</body>
</html>

給兩個<input>元素都增加 key 后, 就不回復(fù)用了,切換類型時鍵入的內(nèi)容也會被刪除,不過<label> 元素仍然是被復(fù)用的,因為沒有添加 key 屬性.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 看看封面圖 再看看這圖 別買了 好吧我就標題黨半次吧 雙十一的攻略在中間部分 本文前面部分主要推介幾部愛情電影,讓...
    隊友閱讀 3,347評論 0 4
  • 第一說 :康有不為 “在我不知道做什么的時候,什么都不做肯定是最好的選擇” ...
    Zwingle閱讀 205評論 0 0
  • 對于春晚的吐槽似乎從來都沒有停過 無意間看到微博上的段子手像是開玩笑的鄙弄 心里想想其實也正常 畢竟都是些喜歡看美...
    sunbaker閱讀 77評論 0 1
  • 效果很簡單,但是寫起來真的不容易,因為Vue對于沒有React這種前端框架經(jīng)驗的人是不友好的(少吐槽,多工作,省下...
    DPBBC閱讀 959評論 1 0

友情鏈接更多精彩內(nèi)容