VueJS:如何输出逗号分隔的数组?

Ben*_*Ben 22 vue.js vuejs2

我知道在VueJS中我可以遍历一个数组:

<span v-for="(element, index) in list">{{ element }}</span>
Run Code Online (Sandbox Code Playgroud)

但是如果我想要一个以逗号分隔的列表呢?例如,如果list = ["alice", "bob", "chuck"],那么上面会输出:

<span>alice</span><span>bob</span><span>chuck</span>
Run Code Online (Sandbox Code Playgroud)

但我想要的是:

<span>alice</span>, <span>bob</span>, <span>chuck</span>
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Ren*_*oth 25

如果您关心的只是逗号分隔,请使用Javascript的内置连接方法:

{{ list.join(', ') }}
Run Code Online (Sandbox Code Playgroud)


Sau*_*abh 24

您可以使用条件渲染来隐藏最后一个,如下:

var demo = new Vue({
  el: '#demo',
  data: function() {
    return {
      lists: ['Vue', 'Angular', 'React']
    };
  }
})
Run Code Online (Sandbox Code Playgroud)
<script src="https://vuejs.org/js/vue.min.js"></script>
<div id="demo">
  <span v-for="(list, index) in lists">
    <span>{{list}}</span><span v-if="index+1 < lists.length">, </span>
  </span>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 您可以通过与 0 进行比较并反转文本和命令的位置来避免使用“.length”。请参阅/sf/answers/2949071331/ (3认同)

Ben*_*Ben 13

我最终做的是:

<span v-for="element in list" class="item">
  <span>{{ element }}</span>
</span>
Run Code Online (Sandbox Code Playgroud)

在CSS中:

.item + .item:before {
  content: ", ";
}
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案非常优雅,但是断线行为很糟糕.当您调整浏览器的大小时,逗号可以转到与最后一个单词隔离的段落的下一行. (3认同)
  • @PauloCheque,我想知道你为什么称它为*“优雅”*。对我来说,因为它将逗号与元素分开,所以这是完全错误的。我确实相信这里*优雅的*解决方案是`.join(', ')`。因为它使逗号与每个项目的最后一个字母粘在一起,并且因为它不会添加额外的逗号。这就是“优雅”。 (2认同)

Uly*_* BN 8

您可以使用v-if在第一个参数上带有条件的属性来做到这一点,避免使用.length

var app = new Vue({
  el: '#app',
  data: {
    list: ['john', 'fred', 'harry']
  }
})
Run Code Online (Sandbox Code Playgroud)
<script src="https://vuejs.org/js/vue.min.js"></script><div id="app">
  <span v-for="(element, index) in list">
    <span v-if="index != 0">, </span><span>{{ element }}</span>
  </span>
</div>
Run Code Online (Sandbox Code Playgroud)


小智 8

解决方案使用"模板"

 <template v-for="(element, index) in list">
   <span>{{element}}</span><template v-if="index + 1 < list.length">, </template>
 </template>
Run Code Online (Sandbox Code Playgroud)


小智 8

最好使用这样的内置JS Array.join方法

<span>{{ list.join(', ') }}</span>
Run Code Online (Sandbox Code Playgroud)

  • 我相信这个答案是 /sf/answers/3563748541/ 的重复。 (3认同)