Vue入门(三)——条件渲染与列表渲染

作者: 零和幺 | 来源:发表于2017-07-27 10:49 被阅读447次
    vue.png

    一、条件渲染

    有时候,我们要根据数据的情况,决定标签是否进行显示,或者是否有其他动作。最常见的就是在表格渲染的时候,如果表格没有数据,就显示无数据;如果有数据,就显示表格数据。

    为了让我们更方便地完成判断,Vue帮我们提供了一个v-if指令。

    举个例子:

    <div id="app">
      <h1 v-if="ok">Yes</h1>
      <h1 v-else>No</h1>  
    </div>
    <!-- 当ok为true的时候,输出: Yes, 否则输出: No -->
    
    <script>
      var app = new Vue({         
        el: '#app',               
        data: {    
          ok: true      // true=>Yes,   false=> No               
        }
      });
    </script>
    

    除此之外,Vue中还提供了一个与v-if类似的指令v-show。它们的功能大体相似,唯一的区别在于:带有v-show的元素始终会被渲染并保留在DOM中。所以,引用Vue文档上的话来说,就是:

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

    此外,还需要被注意的一点是:v-else元素必须紧跟v-ifv-else-if元素的后面,否则不会被识别。

    二、列表渲染

    1.基本v-for循环渲染标签

    模板引擎都会提供循环的支持,Vue也不例外。Vue提供了一个v-for指令,基本用法类似于foreach的用法。

    上个例子你就看懂了。

    <div id="app">
      <table>
        <thead>
          <tr>
            <th>姓名</th>
            <th>年龄</th>
            <th>地址</th>
          </tr>
        </thead>
        <tbody> 
          <!-- 每次for循环,都会创建一个tr标签。item是遍历的元素。 -->
          <tr v-for="item in userList" >
            <td>{{ item.name }}</td>
            <td>{{ item.age }}</td>
            <td>{{ item.address }}</td>
          </tr>
        </tbody>
      </table>
    </div>
    <script>
      var app = new Vue({         
        el: '#app',               
        data: {                   
         userList: [
          {'name': 'Jack', 'age': 18, 'address': 'New York'},
          {'name': 'Jennifer', 'age': 22, 'address': 'LA'},
          {'name': 'Jenny', 'age': 25, 'address': 'Boston'}
         ]
        }
      });
    </script>
    

    其中item代表数组中的每一项,这个名字可以随便起;而userList就是你要遍历的数组。是不是很简单?

    2、Template循环渲染多标签

    上面的例子演示的是,每次循环输出一个<td></td>标签 。如果我们希望每次循环生成两个<td></td>标签呢?如果还要生成其他的标签呢?

    此时,Vue给我们提供了<template>标签,供我们处理以上的情况。官方文档中的例子。

    <ul>
      <!-- 通过template标签,可以一次循环,输出两个li标签 -->
      <template v-for="item in items">
        <li>{{ item.msg }}</li>
        <li class="divider"></li>
      </template>
    </ul>
    

    三、表格渲染综合案例

    下面是一个使用了v-ifv-for的综合案例,案例实现每秒钟往表格中添加一条数据。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Vue入门--动态显示表格</title>
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
    <div id="app">
        <table border="1" cellspacing="0" cellpadding="10">
            <thead>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>地址</th>
            </tr>
            </thead>
            <!-- 如果列表有数据,直接输出表格数据,没有数据提示用户没有数据 -->
            <tbody v-if="userList.length > 0">
            <tr v-for="item in userList" >
                <td>{{ item.name }}</td>
                <td>{{ item.age }}</td>
                <td>{{ item.address }}</td>
            </tr>
            </tbody>
            <tbody v-else>
            <tr><td colspan="3">没有数据!</td></tr>
            </tbody>
        </table>
    </div>
    <script>
      var app = new Vue({
        el: '#app',
        data: {
          userList: []
        }
      });
    
      // 每秒钟插入一条数据。
      setInterval(function () {
        app.userList.push({'name': '张三', 'age': 18, 'address': '女厕所'});
      }, 1000);
    </script>
    </body>
    </html>
    

    会了上面的例子,条件渲染和列表渲染就没有什么问题了。

    其实列表的使用本质还是JavaScript的衍生使用,对于有JS开发基础的童鞋来说,没有什么难度。关键是多写几个案例,这样就可以融会贯通了。

    下一篇,会探讨Vue中的事件绑定处理,敬请期待。

    相关文章

      网友评论

        本文标题:Vue入门(三)——条件渲染与列表渲染

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