学海无涯

导航

列表渲染 v-for

v-for

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

<template>
  <h2>v-for练习</h2>
  <li v-for="(item,index) of items" :key="item">
    {{ index }}- {{ item.message }}
  </li>
</template>

<script setup>
import { ref } from 'vue';
const items=ref([{message: 'Foo'},{message: 'Bar'}])
</script>

其中 items 是源数据的数组,而 item 是迭代项的别名,index 是索引号(可以省略),key 键名

推荐在任何可行的时候为 v-for 提供一个 key attribute,key 绑定的值期望是一个基础类型的值,例如字符串或 number 类型。不要用对象作为 v-for 的 key

v-for 与对象

使用 v-for 来遍历一个对象的所有属性。遍历的顺序会基于对该对象调用 Object.keys() 的返回值来决定。

<template>
    <ul>
    <li v-for="(value,key,index) in myObject" :key="value">
      {{ key }}: {{ value }}:{{ index }}
    </li>
  </ul>
</template>

<script setup>
import { ref,reactive } from 'vue';

const myObject = reactive({
  title: 'How to do lists in Vue',
  author: 'Jane Doe',
  publishedAt: '2016-04-10'
})

</script>

 说明:value :属性的值,key :属性名,index: 索引

在 v-for 里使用范围值

<span v-for="n in 10">{{ n }}</span>

  注意:此处 n 的初值是从 1 开始而非 0。n 也无须声明

v-for 与 v-if

<template v-for="todo in todos">
  <li v-if="!todo.isComplete">
    {{ todo.name }}
  </li>
</template>

组件上使用 v-for

可以直接在组件上使用 v-for,和在一般的元素上使用没有区别 (别忘记提供一个 key):

<MyComponent v-for="item in items" :key="item.id" />

数组变化侦测

变更方法#

Vue 能够侦听响应式数组的变更方法,并在它们被调用时触发相关的更新。这些变更方法包括:

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()

替换一个数组

// `items` 是一个数组的 ref
items.value = items.value.filter((item) => item.message.match(/Foo/))

展示过滤或排序后的结果

有时,我们希望显示数组经过过滤或排序后的内容,而不实际变更或重置原始数据。在这种情况下,你可以创建返回已过滤或已排序数组的计算属性。

const numbers = ref([1, 2, 3, 4, 5])

const evenNumbers = computed(() => {
  return numbers.value.filter((n) => n % 2 === 0)
})

<li v-for="n in evenNumbers">{{ n }}</li>

  

 

posted on 2023-02-27 17:53  宁静致远.  阅读(40)  评论(0编辑  收藏  举报