v-for

作者: 郑馋师 | 来源:发表于2020-02-06 15:56 被阅读0次

接下来的内容主要出自vue的官方文档

渲染列表

我们可以用 v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名。

<ul id="example-1">
  <li v-for="item in items">
    {{ item.message }}
  </li>
</ul>
var example1 = new Vue({
  el: '#example-1',
  data: {
    items: [
      { message: 'Foo' },
      { message: 'Bar' }
    ]
  }
})

这里很明显可以展示出这个api用法,它还有其他用法

第二个参数

在 v-for 块中,我们可以访问所有父作用域的属性。v-for 还支持一个可选的第二个参数,即当前项的索引。也可以用 of 替代 in 作为分隔符,因为它更接近 JavaScript 迭代器的语法

<ul id="example-2">
  <li v-for="(item, index) in items">
    {{ parentMessage }} - {{ index }} - {{ item.message }}
  </li>
</ul>
var example2 = new Vue({
  el: '#example-2',
  data: {
    parentMessage: 'Parent',
    items: [
      { message: 'Foo' },
      { message: 'Bar' }
    ]
  }
})

使用对象

也可以用 v-for 来遍历一个对象的属性。

<ul id="v-for-object" class="demo">
  <li v-for="value in object">
    {{ value }}
  </li>
</ul>
new Vue({
  el: '#v-for-object',
  data: {
    object: {
      title: 'How to do lists in Vue',
      author: 'Jane Doe',
      publishedAt: '2016-04-10'
    }
  }
})

你也可以提供第二个的参数为 property 名称 (也就是键名):

<div v-for="(value, name) in object">
  {{ name }}: {{ value }}
</div>

维护状态

当 Vue 正在更新使用 v-for 渲染的元素列表时,它默认使用“就地更新”的策略。如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序,而是就地更新每个元素,并且确保它们在每个索引位置正确渲染。这个类似 Vue 1.x 的 track-by="$index"。

这个默认的模式是高效的,但是只适用于不依赖子组件状态或临时 DOM 状态 (例如:表单输入值) 的列表渲染输出。

为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性:

<div v-for="item in items" v-bind:key="item.id">
  <!-- 内容 -->
</div>

建议尽可能在使用 v-for 时提供 key attribute,除非遍历输出的 DOM 内容非常简单,或者是刻意依赖默认行为以获取性能上的提升。

因为它是 Vue 识别节点的一个通用机制,key 并不仅与 v-for 特别关联。后面我们将在指南中看到,它还具有其它用途。

key

key 的特殊属性主要用在 Vue 的虚拟 DOM 算法,在新旧 nodes 对比时辨识 VNodes。如果不使用 key,Vue 会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/复用相同类型元素的算法。而使用 key 时,它会基于 key 的变化重新排列元素顺序,并且会移除 key 不存在的元素。

有相同父元素的子元素必须有独特的 key。重复的 key 会造成渲染错误。
这个key其实也就相当于一个序列号
它也可以用于强制替换元素/组件而不是重复使用它。当你遇到如下场景时它可能会很有用:

  • 完整地触发组件的生命周期钩子
  • 触发过渡
    eg
<transition>
  <span :key="text">{{ text }}</span>
</transition>

当 text 发生改变时,<span> 总是会被替换而不是被修改,因此会触发过渡。

相关文章

  • vue中v-for循环

    v-for 循环 v-for表格

  • vue笔记-v-for指令学习(五)

    v-for循环普通数组 v-for循环对象数组 v-for循环对象属性 v-for迭代数字 注意点:2.2.0+后...

  • Vue 基础

    Vue 起步 Vue V-for循环 (一) Vue V-for 循环(二) Vue v-for表格

  • Vue.js入门整理

    Vue基础 常用指令循环v-for数组v-for="name in arr" , json格式v-for="nam...

  • 2020-02-05

    v-for循环对象数组 v-for 循环对象

  • 2018-09-10第一节vue

    v-for循环1,用vue输出内容 2,用v-for循环数组或对象 3,用v-for循环输出数组对象

  • vue.js 列表渲染

    v-for 我们用 v-for 指令根据一组数组的选项列表进行渲染。 v-for 指令需要以 item in it...

  • Vue基础(下)

    (一)v-for v-for作用:根据数据生成列表结构数组常与v-for结合使用语法常常是(item,index)...

  • Vue2.0 列表渲染(译)

    v-for 我们用v-for 指令根据一组数组的选项列表进行渲染。v-for 指令需要以 item in item...

  • Vue v-for循环报错

    记得之前写过v-for但是报错,后来找到原因如下: v-for (需要注意的是,v-for循环需要嵌套在div外...

网友评论

      本文标题:v-for

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