05-Vue基础-基本指令

基本指令

1. 条件渲染指令

Vue指令中的条件渲染指令有v-ifv-else-ifv-else等,当表达式结果为true时,指令就会进行渲染:

  • v-ifv-else
<div id="app">
    <template v-if="type === 'name'">
        <label for="username">用户名:</label>
        <input type="text" name="username" placeholder="请输入用户名" key="username">
    </template>
    <template v-else>
        <label for="email">邮箱:</label>
        <input type="text" name="email" placeholder="请输入邮箱" key="email">
    </template>
    <button @click="handleClick">切换输入类型</button>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            type: 'name'
        },
        methods: {
            handleClick() {
                this.type = this.type === 'name' ? 'mial' : 'name';
            }
        }
    });
</script>

注意:key属性保证了元素唯一,不会被复用

  • v-show

v-show的用法基本和v-if一致,只不过v-show是改变元素的display样式属性。

<div id="app">
    <p v-show="status === 1">当status为1时显示该行</p>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            status: 2
        }
    });
</script>

v-show的表达式结果为false时,元素会隐藏,查看DOM会看到在元素上加载了内联样式:display: none;

上面的示例最终渲染为:

<p style="display: none">当status为1时显示该行</p>

注意:v-show不能再<template>上使用

  • v-ifv-show的区别

(1)手段:

v-if是动态的向DOM树内添加或者删除DOM元素;
v-show是通过设置DOM元素的display样式属性控制显隐;

(2)编译过程:

v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;
v-show只是简单的基于css切换;

(3)编译条件:

v-if是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译(编译被缓存?编译被缓存后,然后再切换的时候进行局部卸载);
v-show是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且DOM元素保留;

(4)性能消耗:

v-if有更高的切换消耗;
v-show有更高的初始渲染消耗;

(5)使用场景:

v-if适合条件改动不大的情况;
v-show适合频繁切换。

1.2. 列表渲染指令v-for

1.2.1. 基本用法

当需要将一个数组遍历或枚举循环时,就可以使用v-for指令,示例如下:

<div id="app">
    <ul>
        <li v-for="book in books">
            {{ book.name }}
        </li>
    </ul>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            books: [
                { name: '《Vue.js 实战》' },
                { name: '《JavaScript 语言精粹》' },
                { name: '《JavaScript 高级程序设计》' }
            ]
        }
    });
</script>

v-for表达式支持一个可选参数作为当前项的索引,如下:

<div id="app">
    <ul>
        <li v-for="(book, index) in books">
            {{ index }} - {{ book.name }}
        </li>
    </ul>
</div>

可以在Vue内置的<template>标签上,将多个元素进行渲染:

<div id="app">
    <ul>
        <template v-for="book in books">
            <li>书名:{{ book.name }}</li>
            <li>作者:{{ book.author }}</li>
        </template>
    </ul>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            books: [
                { name: '《Vue.js 实战》', author: "景逸"},
                { name: '《JavaScript 语言精粹》', author: "景逸" },
                { name: '《JavaScript 高级程序设计》', author: "景逸" }
            ]
        }
    });
</script>

除了数组还可以遍历对象,同时有两个可选参数:键名、索引

<div id="app">
    <ul>
       <li v-for="(value, key, index) in user">
           {{ index }} - {{ key }} - {{ value }}
       </li>
    </ul>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            user: {
                name: 'cculin',
                age: '26',
                style: 'handsome'
            }
        }
    });
</script>

keyindex分别就是键名、索引。

1.3. 数组更新

Vue提供了检测数组变化的方法:push,pop,shift,unshift,splice,sort,reverse

例如在books添加一本书:

app.books.push({
    name: '《CSS 解密》',
    author: 'Lea Verou'
});

当你的才华撑不起自己的野心,那就努力学习吧!

posted on 2020-01-20 17:11  cculin  阅读(89)  评论(0)    收藏  举报