Vue v-for 指令

实例

使用 v-for 指令基于数组创建动物列表:

  1. <template>
  2. <h2>v-for 指令实例</h2>
  3. <p>使用 v-for 指令基于数组创建动物列表。</p>
  4. <ul>
  5. <li v-for="x in animals">{{ x }}</li>
  6. </ul>
  7. </template>

定义与用法

v-for 指令用于基于数据源呈现多个元素。

v-for 指令与语法 "(item, key, index) in dataSource" 一起使用,其中

  • "item" 别名表示 "dataSource" 中的一个元素。
  • "key" 别名表示如果 "dataSource" 数据源是对象,则可用于获取属性名称。
  • 如果数据源是数组或对象,则可以使用 "index" 别名。
  • "dataSource" 必须是您正在循环使用的实际数据源的名称。

您可以自己选择 "item", "key""index" 别名的名称,但顺序是 "item, key, index"

这些是 v-for 指令可以使用的数据源:

数据源类型详情
Arrayv-for 循环遍历数组,可以提取并使用每个元素的元素和索引。
Objectv-for 循环通过对象属性名称、值和索引可以挑选出来使用。
numberv-for 呈现一个列表,其中每个项目都是一个数字,最后一个数字是提供的数字每个元素的索引也可以被挑选出来。
stringv-for 在字符串中循环每个字符及其索引都可以挑选出来使用。
Iterablev-for 还可以循环遍历可迭代项 Iterable 是使用 Iterable 协议的值,如 Map 和 Set。
注意:为了优化性能,Vue 在处理数据源时重用使用 v-for 创建的元素。为了防止 Vue 在使用 v-for 时错误地重用元素,您应该始终使用带有 v-bind 的特殊键属性,以唯一地标记每个元素。

更多实例

实例 1

使用 v-for 指令基于数组呈现动物列表,并取数组中每个元素的索引:

  1. <template>
  2. <h2>v-for 指令实例</h2>
  3. <p>使用 v-for 指令基于数组创建动物列表和每种动物的索引。</p>
  4. <ul>
  5. <li v-for="(x, index) in animals">On index {{ index }}: "{{ x }}"</li>
  6. </ul>
  7. </template>
  8. <script>
  9. export default {
  10. data() {
  11. return {
  12. animals: ['Tiger','Zebra','Wolf','Crocodile','Seal']
  13. };
  14. }
  15. };
  16. </script>
实例 2

使用 v-for 指令来呈现属性列表,为对象中的每个属性挑选属性名称和值:

  1. <template>
  2. <h2>v-for 指令实例</h2>
  3. <p>对对象使用 v-for 指令来创建对象属性和相应属性值的列表。</p>
  4. <ul>
  5. <li v-for="(x, key) in animal">(Property name: value) = ({{ key }}: {{ x }})</li>
  6. </ul>
  7. </template>
  8. <script>
  9. export default {
  10. data() {
  11. return {
  12. animal: {
  13. name: 'Lion',
  14. heightCM: 110,
  15. weightKG: 150
  16. }
  17. };
  18. }
  19. };
  20. </script>
实例 3

使用 v-for 指令来呈现基于数字的列表:

  1. <template>
  2. <h2>v-for 指令实例</h2>
  3. <p>使用带有 number 的 v-for 指令来呈现具有该数量元素的列表。</p>
  4. <ul>
  5. <li v-for="(x, index) in 10">Item: {{ x }}, index: {{ index }}</li>
  6. </ul>
  7. </template>
实例 4

使用 v-for 指令在字符串中循环:

  1. <template>
  2. <h2>v-for 指令实例</h2>
  3. <p>使用 v-for 指令循环遍历字符串中的字符。</p>
  4. <ul>
  5. <li v-for="(x, index) in 'Ice cream'">Item: "{{ x }}", index: {{ index }}</li>
  6. </ul>
  7. </template>
实例 5

使用 v-for 指令循环通过使用 Iterable 协议创建的对象:

  1. <template>
  2. <h2>v-for 指令实例</h2>
  3. <p>基于使用 Iterable Protocol 创建的对象,使用 v-for 指令来呈现列表。</p>
  4. <ul>
  5. <li v-for="value in iterableObject">{{ value }}</li>
  6. </ul>
  7. </template>
  8. <script>
  9. export default {
  10. data() {
  11. return {
  12. iterableObject: this.createIterable(['City', 'Park', 'River'])
  13. };
  14. },
  15. methods: {
  16. createIterable(array) {
  17. let currentIndex = -1;
  18. return {
  19. [Symbol.iterator]: function () {
  20. return {
  21. next: () => {
  22. if (currentIndex < array.length - 1) {
  23. currentIndex++;
  24. return { value: array[currentIndex], done: false };
  25. } else {
  26. return { done: true };
  27. }
  28. }
  29. };
  30. }
  31. };
  32. }
  33. }
  34. };
  35. </script>
实例 6

使用 v-for 指令为字符串中的每个字符呈现一个 div 元素。始终建议您将 v-bind:keyv-for 指令一起使用:

  1. <template>
  2. <h2>v-for 指令实例</h2>
  3. <p>将v-for指令与 'v-bind:key' 一起使用以基于字符串呈现 DIV 元素。</p>
  4. <div id="wrapper">
  5. <div v-for="x in text" v-bind:key="x">{{ x }}</div>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. data() {
  11. return {
  12. text: 'I love ice cream.'
  13. };
  14. }
  15. };
  16. </script>
  17. <style>
  18. #wrapper {
  19. display: flex;
  20. flex-wrap: wrap;
  21. width: 280px;
  22. }
  23. #wrapper > div {
  24. margin: 5px;
  25. padding: 5px 10px;
  26. border: solid black 1px;
  27. background-color: lightgreen;
  28. }
  29. </style>

分类导航