控制元素显示隐藏

本节讲解 v-if 和 v-show 指令的用法,这两个指令的作用是控制元素的显示和隐藏。

v-if和v-show指令

案例1:新建 div 元素,使用 v-if 和 v-show 控制元素的显示和隐藏,代码如下。

M 层代码如下。

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            // 定义 flag
            // true 为显示,false 为隐藏
            flag: true
        }
    });
</script>

视图层代码如下。

<div id="app" v-cloak>
    <div v-if="flag">
        <h1>v-if 的使用</h1>
    </div>
    <div v-show="flag">
        <h1>v-show 的使用</h1>
    </div>
</div>

代码解析如下。

v-if 和 v-show 都可以控制元素的显示和隐藏,当值为 true 时元素显示,当值为 false 时元素隐藏。

v-if 和 v-show 的区别:v-if 是直接删除或者创建元素,控制元素的显示和隐藏;v-show 是使用 display 样式控制元素的显示和隐藏。

案例2:单击按钮控制 div 的显示和隐藏。

视图层代码如下。

<div id="app" v-cloak>
    <input type="button" value="单击" @click="toggle">
    <div v-if="flag">
        <h1>v-if 的使用</h1>
    </div>
    <div v-show="flag">
        <h1>v-show 的使用</h1>
    </div>
</div>

M 层代码如下。

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            flag: true
        },
        methods: {
            toggle() {
                this.flag = !this.flag;
            }
        }
    });
</script>

上述代码只做了一件事情,即单击按钮触发 toggle 事件,在 toggle 事件中让 flag 取反,最终实现单击按钮控制 div 元素的显示和隐藏。

v-if 和 v-else 的使用与原生 JS 的用法类似,代码如下。

视图层代码如下。

<div id="app" v-cloak>
    <div v-if="type == 'A'">A</div>
    <div v-else-if="type == 'B'">B</div>
    <div v-else>HELLO</div>
</div>

M 层代码如下。

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            type: 'A'
        }
    });
</script>

代码解析如下。

上述代码中,判断 type 值,如果 type 值为 A 则执行 v-if,如果 type 值为 B 则执行 v-else-if,如果 type 值为其他字母则会执行 v-else。

v-if实现选项卡案例

本节将实现两个功能。

  • 实现单击菜单切换 div 盒子。

  • 实现菜单排他功能。

视图层代码如下。

<div id="app" v-cloak>
    <div>
        <span
            :class="{ redColor: active == 0 }"
            @click="btn(0)"
        >
            vue.js
        </span>
        <span
            :class="{ redColor: active == 1 }"
            @click="btn(1)"
        >
            node.js
        </span>
    </div>
    <div v-if="active == 0">
        vue 内容
    </div>
    <div v-if="active == 1">
        node 内容
    </div>
</div>

业务逻辑代码如下。

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            active: 0
        },
        methods: {
            btn(i) {
                this.active = i;
            }
        }
    });
</script>

代码解析如下。

菜单排他功能在前文做过一次,使用绑定 class 属性的形式,单击菜单触发 btn 方法,并进行参数传递。

在 btn 方法中,把 active 的值修改成用户所传递的值。

在 v-if 中只需要把 active 的值和菜单中 active 的值设置为相同即可。