點燈坊

失くすものさえない今が強くなるチャンスよ

Vue 之 v-for 搭配 Object

Sam Xiao's Avatar 2020-10-07

當使用 v-for 顯示重複資料時,直覺都會想到 Array,事實上 ECMAScript 的 Object 也是一種 Container,而 v-for 也支援 Object,在有些情境使用 Object 會比 Array 方便。

Version

Vue 2.6.11

Array

object000

資料為 Object Array,可使用 v-for 加以顯示。

<template>
  <div>
    <ul>
      <li v-for="(x, index) in books" :key="index">
        {{ x.title }} / {{ x.price }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data: () => ({
    books: [
      { title: 'FP in JavaScript', price: 100 },
      { title: 'RxJS in Action', price: 200 },
      { title: 'Speaking JavaScript', price: 300 }
    ]
  })
}
</script>

13 行

data: () => ({
  books: [
    { title: 'FP in JavaScript', price: 100 },
    { title: 'RxJS in Action', price: 200 },
    { title: 'Speaking JavaScript', price: 300 }
  ]
})

books 為 Object Array。

第 4 行

<li v-for="(x, index) in books" :key="index">
  {{ x.title }} / {{ x.price }}
</li>

使用 v-for 搭配 Array 顯示重複資料。

Object

<template>
  <div>
    <ul>
      <li v-for="(v, k) in books" :key="k">
        {{ k }} / {{ v }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data: () => ({
    books: {
      'FP in JavaScript': 100,
      'RxJS in Action': 200 ,
      'Speaking JavaScript': 300
    }
  })
}
</script>

13 行

data: () => ({
  books: {
    'FP in JavaScript': 100,
    'RxJS in Action': 200 ,
    'Speaking JavaScript': 300
  }
})

books 改以 Object 表示。

第 4 行

<li v-for="(v, k) in books" :key="k">
  {{ k }} / {{ v }}
</li>

v-for 也支援 Object。

  • 第一個 argument 為 Object 的 property value
  • 第二個 argument 為 Object 的 property key

如此就能順利的取得 Object 的 key / value 了。

Conclusion

  • 使用 v-for 別只想到 Array,事實上有些需求直接使用 Object 可能更方便

Reference

Vue, v-for with an Object