68

如果我有以下数据属性:

person: {name: 'Joe', age: 35, department: 'IT'}

并想循环并输出如下:

name: Joe, age: 35, department: IT

到目前为止,我有:

<span v-for="(val, key) in person">{{key}}: {{val}}, </span>

但这显示:

name: Joe, age: 35, department: IT,

最后有一个额外的逗号,我怎样才能让它检测到它是最后一个道具而不显示逗号?我认为 v-show 或 v-if 可能是解决方案,但无法完全弄清楚如何使其工作。

4

7 回答 7

89

这是一种方法。

<span v-for="(val,key,index) of person">
  key: {{key}}, val: {{val}}, index: {{index}}
  <span v-if="index != Object.keys(person).length - 1">, </span>
</span>
于 2017-03-11T20:42:25.797 回答
48

如果您正在循环遍历数组而不是对象,这是一个解决方案:

<div id="app">
  <div v-for="(item, index) in items">
    <div v-if="index == items.length - 1">yes</div>
    {{ item }}, {{ index }}
  </div>
</div>
于 2018-10-07T07:06:57.587 回答
44

您还可以通过在每个项目前插入逗号来“作弊”,因为这样更容易检查第一个项目 ( index !== 0)。

<span v-for="(val, key, index) in person">
  <span v-if="index !== 0">, </span>
  {{key}}: {{val}}
</span>
于 2019-08-20T15:44:28.497 回答
16

您可以使用 acomputed来查看当前索引( 的第三个参数v-if)是否是最后一个属性:

computed: {
  last(){
     return Object.keys(this.person).length-1;
  }
}

然后在你的v-for

<span v-for="(val, key, index) in person">{{key}}: {{val}}<span v-if="index !== last">, </span> </span>

这是 JSFiddle:https ://jsfiddle.net/wv2ujxvn/

于 2017-03-11T20:44:08.043 回答
10

这也有效:

<span v-for="(value,key) in persons" :key='key'>
    {{key}}: {{val}} 
    <span v-if="key+1 != persons.length">, </span>
</span>                                                      
于 2019-06-14T14:52:54.300 回答
5

可惜 Vue 没有提供快捷方式。

我个人更喜欢使用小的 CSS:

<div class="list">
  <span>Item 1</span>
  <span>Item 2</span>
  <span>Item 3</span>
</div>
.list span:not(:last-child)::after {
  content: ',';
}
于 2021-01-07T14:01:49.977 回答
1

如果您想将有关此模式的知识存储在代码中而不是堆栈溢出中,您可以创建如下组件:

<template>
  <span v-if="show"><slot></slot></span>
</template>
<script>
  export default {
    name: 'separator',
    props: ['items', 'index'],
    computed: {
      show () {
        return this.index !== (Array.isArray(this.items) ? this.items : Object.keys(this.items)).length - 1
      }
   }
}
</script>

这并不一定会使代码缩短,但更容易记住:

<span v-for="(val, key, index) of person">key: {{key}}, val: {{val}} 
  <separator :items="person" :index="index">, </separator>
</span>
于 2018-06-07T16:43:06.667 回答