【问题标题】:Vue js V-for for image grid view 3x3用于图像网格视图 3x3 的 Vue js V-for
【发布时间】:2023-03-07 17:06:02
【问题描述】:

我有一个 API,每次发送请求时都会返回 9 个图像 URL。我想在 3x3 网格中显示响应图像,但我很困惑如何做到这一点。我所能做的就是使用 v-for 水平或垂直循环图像显示组件。请帮帮我。

【问题讨论】:

  • 你走了多远?您可以分享您尝试设置样式的返回代码吗?您是否尝试使用 CSS Grid、flexbox 或其他东西?
  • TBH 我卡在这一点上,因为我想从我得到的 json 对象中制作像 i.stack.imgur.com/mVGfG.png 这样的东西,但我所能做的就是使用 v-for 让它垂直向下,我想要做的是 v 表示水平直到。 3 列,在第 3 列之后,它将创建一个新行

标签: javascript css vue.js


【解决方案1】:

您可以使用CSS grid layout,请务必检查浏览器支持。

我们需要使用 display: grid 使容器成为网格容器,并使用 grid-template-columns。

您可以创建一个接受数字道具的组件,然后在 repeat() 表示法中使用它。

重复({numberOfColumns}, minmax({minColumnSize}, {maxColumnSize}))

new Vue({
  el: "#app",
  data() {
    return {
      cards: [1, 2, 3, 4, 5, 6, 7, 8, 9],
      numberOfColumns: 9,
    }
  },
  computed: {
    gridStyle() {
      return {
        gridTemplateColumns: `repeat(${this.numberOfColumns}, minmax(100px, 1fr))`
      }
    },
  },
  methods: {
    addCard() {
      this.cards.push('new-card')
    },
  },
})

Vue.config.productionTip = false;
Vue.config.devtools = false;
.card-list {
  display: grid;
  grid-gap: 1em;
}

.card-item {
  background-color: dodgerblue;
  padding: 2em;
}

body {
  background: #20262E;
  padding: 20px;
  font-family: Helvetica;
}

#app {
  background: #fff;
  border-radius: 4px;
  padding: 20px;
  transition: all 0.2s;
}

ul {
  list-style-type: none;
}
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
<div id="app">
  Columns: <input v-model.number="numberOfColumns">
  <ul :style="gridStyle" class="card-list">
    <li v-for="(card, index) in cards" class="card-item">
      {{ index + 1 }}
    </li>
  </ul>
  <button @click="addCard">
    Add card
  </button>
</div>

来源:How to create a dynamic grid using vue?

【讨论】:

  • 我的天,谢谢你,先生,你刚刚度过了我的一天,上帝保佑你
  • 我很高兴它可以提供帮助。确保将答案标记为已接受的答案,以便更好地帮助路过的人!
猜你喜欢
  • 2016-02-15
  • 2019-03-25
  • 2022-01-05
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多