Menu
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Vue v-for 指令


示例

使用 v-for 指令根据数组创建哺乳动物列表

<template>
  <h2>Example v-for Directive</h2>
  <p>Using the v-for directive to create a list of mammals based on an array.</p>
  <ul>
    <li v-for="x in animals">{{ x }}</li>
  </ul>
</template>
运行示例 »

查看以下更多示例。


定义和用法

v-for 指令用于根据数据源渲染多个元素。

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

  • "item" 别名表示 "dataSource" 中的元素。
  • "key" 别名可用于获取数据源为对象时的属性名称。
  • "index" 别名可用于数据源为数组或对象的情况。
  • "dataSource" 必须是你正在循环的实际数据源的名称。

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

以下是可以由 v-for 指令使用的数据源

数据源类型 详细信息
数组 v-for 循环遍历数组,可以提取并使用每个元素的元素和索引。 运行示例 »
对象 v-for 循环遍历对象。可以提取并使用属性名称、值和索引。 运行示例 »
数字 v-for 渲染一个列表,其中每个项目都是从一个开始的数字,最后一个数字是提供的数字。还可以提取每个元素的索引。 运行示例 »
字符串 v-for 循环遍历字符串。可以提取并使用每个字符及其索引。 运行示例 »
可迭代对象 v-for 还可以循环遍历可迭代对象。可迭代对象是使用可迭代协议的值,例如 Map 和 Set。 运行示例 »

注意:为了优化性能,当数据源被操作时,Vue 会重用使用 v-for 创建的元素。这会导致奇怪的结果 (此处解释)。为了防止 Vue 在使用 v-for 时错误地重用元素,你应该始终使用带有 v-bind 的特殊 key 属性来唯一标记每个元素 (请参见示例 6)。


更多示例

示例 1

使用 v-for 指令根据数组渲染一个哺乳动物列表,并提取数组中每个元素的索引

<template>
  <h2>Example v-for Directive</h2>
  <p>Using the v-for directive to create a list of mammals, and the index of each mammal, based on an array.</p>
  <ul>
    <li v-for="(x, index) in animals">On index {{ index }}: "{{ x }}"</li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      animals: ['Tiger','Zebra','Wolf','Crocodile','Seal']
    };
  }
};
</script> 
运行示例 »

示例 2

使用 v-for 指令渲染一个属性列表,提取对象中每个属性的属性名称和值

<template>
  <h2>Example v-for Directive</h2>
  <p>Using the v-for directive on an Object to create a list of the object properties and the respective property values.</p>
  <ul>
    <li v-for="(x, key) in animal">(Property name: value) = ({{ key }}: {{ x }})</li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      animal: {
        name: 'Lion',
        heightCM: 110,
        weightKG: 150
      }
    };
  }
};
</script>
运行示例 »

示例 3

使用 v-for 指令根据数字渲染一个列表

<template>
  <h2>Example v-for Directive</h2>
  <p>Using the v-for directive with number to render a list with that number of elements.</p>
  <ul>
    <li v-for="(x, index) in 10">Item: {{ x }}, index: {{ index }}</li>
  </ul>
</template>
运行示例 »

示例 4

使用 v-for 指令循环遍历字符串中的字符

<template>
  <h2>Example v-for Directive</h2>
  <p>Using the v-for directive to loop through the characters in a string.</p>
  <ul>
    <li v-for="(x, index) in 'Ice cream'">Item: "{{ x }}", index: {{ index }}</li>
  </ul>
</template>
运行示例 »

示例 5

使用 v-for 指令循环遍历使用可迭代协议创建的对象

<template>
  <h2>Example v-for Directive</h2>
  <p>Using the v-for directive  to render a list, based on an object created with the Iterable Protocol.</p>
  <ul>
    <li v-for="value in iterableObject">{{ value }}</li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      iterableObject: this.createIterable(['City', 'Park', 'River'])
    };
  },
  methods: {
    createIterable(array) {
      let currentIndex = -1;
      return {
        [Symbol.iterator]: function () {
          return {
            next: () => {
              if (currentIndex < array.length - 1) {
                currentIndex++;
                return { value: array[currentIndex], done: false };
              } else {
                return { done: true };
              }
            }
          };
        }
      };
    }
  }
};
</script>
运行示例 »

示例 6

使用 v-for 指令为字符串中的每个字符渲染一个 div 元素。始终建议在 v-for 指令中使用 v-bind:key

<template>
  <h2>Example v-for Directive</h2>
  <p>Using the v-for directive with 'v-bind:key' to render DIV elements, based on a string of characters.</p>
  <div id="wrapper">
    <div v-for="x in text" v-bind:key="x">{{ x }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      text: 'I love ice cream.'
    };
  }
};
</script>

<style>
#wrapper {
  display: flex;
  flex-wrap: wrap;
  width: 280px;
}
#wrapper > div {
  margin: 5px;
  padding: 5px 10px;
  border: solid black 1px;
  background-color: lightgreen;
}
</style>
运行示例 »

相关页面

JavaScript 教程:JS 可迭代对象

Vue 教程:Vue v-for 指令

Vue 教程:Vue v-for 组件

Vue 教程:Vue 动画与 v-for

Vue 参考:Vue 'key' 属性


×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.