vue.js - 如何将 v-for 结果排序到多个列表中?

标签 vue.js

我希望能够将 v-for 结果分成几个这样的列表:

Element 1     Element 5     Element 9
Element 2     Element 6     Element 10
Element 3     Element 7     Element 11
Element 4     Element 8     Element 12

对于从元素 1 到元素 12 的列表(按数字顺序)。

列表的大小可以改变,但它应该始终按 3 列排序(只有行数会改变)。

有可能吗?

最佳答案

可以通过 column-count 实现纯 CSS 解决方案( browser support ):

.columns {
  column-count: 3;
}
<ul class="columns">
  <li>Element 1
  <li>Element 2
  <li>Element 3
  <li>Element 4
  <li>Element 5
  <li>Element 6
  <li>Element 7
  <li>Element 8
  <li>Element 9
  <li>Element 10
  <li>Element 11
  <li>Element 12
</ul>

否则,您可以自己在代码中对元素进行分组并相应地呈现这些组:

new Vue({
  el: '#app',
  
  data: {
    items: [
      'Element 1',
      'Element 2',
      'Element 3',
      'Element 4',
      'Element 5',
      'Element 6',
      'Element 7',
      'Element 8',
      'Element 9',
      'Element 10',
      'Element 11',
      'Element 12',
    ],
  },
  
  computed: {
    groups() {
      // This algorithm may not be the best, but you get the idea
      // (it handles non-divisible column sizes nicely)
      const columns = 3;
      const rows = Math.ceil(this.items.length / columns);
      const groups = Array(columns).fill(0);
      
      for (let i = 0; i < this.items.length; i++) {
        groups[i % columns]++;
      }
      
      let i = 0;
      return groups.map(size => {
        const slice = this.items.slice(i, i + size);
        i += size;
        return slice;
      });
    }
  }
})
.columns {
  display: flex;
}

.column {
  flex-grow: 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app" class="columns">
  <ul v-for="group of groups" class="column">
    <li v-for="item of group">{{ item }}</li>
  </ul>
</div>

关于vue.js - 如何将 v-for 结果排序到多个列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57410769/

相关文章:

vue.js - Vuetify : scroll list inside card

javascript - 具有动态项槽的 vuetify 数据表格式列

vue.js - 具有相同名称函数的两个 Mixin Vuejs

javascript - 定义 Vue.js 计算属性的辅助方法

css - 如何更改 Vuetify 中文本字段的宽度和高度?

vue.js - 如何将类应用到 Buefy 表中的特定单元格?

vuejs2 - VueJS 中的 Props 发生变化时重新加载组件

javascript - Vuejs如何在#app之前声明HTML中的组件

javascript - 如何在运行时在 Vue 3 中将组件呈现为其 HTML 字符串

javascript - Vue.js:如何修复 'b-modal' 未在自定义组件中显示