zoukankan      html  css  js  c++  java
  • 5.vue的v-for列表渲染

    如下代码所示

    <div id="app">
    <ul>
    <li v-for="item,index in items" :key="index">
    {{index}}{{ item.message }}
    </li>
    </ul>
    <ul>
    <li v-for="value, key in object" :key="index">
    {{key}} : {{ value }}
    </li>
    </ul>
    </div>
    <script type="text/javascript">
    var vm = new Vue({
    el : "#app",
    data : {
    items : [
    { message: 'Foo' },
    { message: 'Bar' }
    ],
    object: {
    title: 'How to do lists in Vue',
    author: 'Jane Doe',
    publishedAt: '2016-04-10'
    }
    }
    });
    </script>

    1.v-for指令,可以基于数组,来渲染列表, 使用格式为  item in items 形式。

    items 是源数据数组, item是被迭代的数组元素的别名 ,简单来说, items就是如下代码的 items数组 , item就是数组中的2个对象,代表{ message: 'Foo' }或者{ message: 'Bar' } 的每一个。 

    2.v-for 可以支持第二个参数,是当前项目的索引, 书写格式为   <li v-for="(item, index) in items">  {{ index }} - {{ item.message }} </li>

    3.v-for 中的item in items 可以书写第二种方法 - item of items ,效果等同, in可替换为of

    4.v-for指令 可以遍历对象 ,来渲染列表,使用格式为 value in object形式

    value为对象的属性值,object则是对象本身。 如下方代码object。

    5.v-for 对象形式支持第二个参数,格式为  v-for="(value, name) in object" ,name为对象的属性名, 则value可以理解为object中的  'Jane Doe',name为author

    6.v-for 对象形式可以有第三个参数,索引,格式为  <div v-for="(value, name, index) in object"> {{ index }}. {{ name }}: {{ value }} </div>,输出结果为1. author : Jane Doe

    7.v-for ,采取就地更新策略, 如果数据项顺序改变, 不会移动元素来匹配数据顺序。 

    例如

    页面=========

    <li v-for="item,index in items" >
    {{index}}{{ item.message }}
    </li>

    数据=====================

    items : [
    { message: 'Foo' },
    { message: 'Bar' }
    ],

    输出============

    • 0Foo
    • 1Bar

    如果更改data顺序为

    items : [
    { message: 'Bar' },
    { message: 'Foo' },
    ],

    输出=============

    • 0Bar
    • 1Foo

    以上可知,顺序直接被更改,不会记录原本的0 和1 

    解决方式和必操作步骤

    是 v-for渲染过程, 必须要动态绑定key ,能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 书写方式是

    <ul>
    <li v-for="item,index in items" :key="item.id">
    {{item.id}}{{ item.message }}
    </li>
    </ul>

    data======

    items : [
    { message: 'Bar' , id : 0},
    { message: 'Foo' , id : 1},
    ],

    输出-==========

    • 0----Bar
    • 1----Foo

    如果data====

    { message: 'Foo' , id : 1},
    { message: 'Bar' , id : 0},

    输出=======

    • 1----Foo
    • 0----Bar

    如果书写key ,就会动态绑定元素, 冒号相当于 v-bind:

    如无特殊情况,我们都可以用index ,如果后台给予了唯一标识,尽量用后台接口提供的唯一标识, 以保证更新每个元素,都能确保他们争取渲染。

  • 相关阅读:
    浅谈“踹”字典树
    2019.11.9 csp-s 考前模拟
    Luogu P1600[NOIP2016]day1 T2天天爱跑步
    Luogu P1197 [JSOI2008]星球大战
    Trie树(字典树)整理
    洛谷P3294 [SCOI2016]背单词——题解
    浅析差分及其推广(树上差分与广义差分)
    洛谷P1600 天天爱跑步——题解
    深入理解容斥原理
    花式求LCA
  • 原文地址:https://www.cnblogs.com/maomao-Sunshine/p/11647027.html
Copyright © 2011-2022 走看看