我怎样才能在 vue 中做一个等效的 JS? (n 个数字递增)

How can i do an equivalent JS for in vue? (Increments in n numbers)

我正在尝试制作一个 select 数字跳过 15 个单位(这是一个 select 分钟:0 分钟、15 分钟、30 分钟、45 分钟),我已经使用 EJS 制作:

<% for(let x = 0; x < 60; x+= 15) { %>
   <option value="<%= x %>"><%= x %> minutes</option>
<% } %>

它在 EJS 中有效,但现在我正在将该组件迁移到 Vue 3 组件,但我不知道如何做这样的 for,在 vue i 中跳过 15 个单位可以使用 a 跳过 1 个单元:

<option v-for="i in 60" :key="i" :value="i">{{ i }} minutes</option>

那么我怎样才能将 EJS 代码“翻译”成 Vue?非常感谢!

评论

因为这只有 4 个可能的值,所以我可能只是 hard-code 它们在 util 库中并将它们导入到我需要它们的组件中

解决方案

我会使用计算的 属性 来处理这个问题:

new Vue({
  computed: {
    timeIntervals() {
      let time = 0;
      let ret = [];

      while (time < 60) {
        ret.push(time);
        time += 15;
      }

      return ret;
    }
  },
}).$mount('#root');
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="root">
  <select>
    <option v-for="interval in timeIntervals" :key="interval" :value="interval">{{interval}}</option>
  </select>
</div>

我在计算 属性 中生成间隔数组,然后在模板内部使用它来显示每个间隔

使用 Vue 3 的解决方案

const App = {
  computed: {
    timeIntervals() {
      let intervals = [];

      for (let i = 0; i < 60; i += 15) {
        intervals.push(i);
      }

      return intervals;
    },
  }
}

Vue.createApp(App).mount('#root')
<script src="https://unpkg.com/vue@next"></script>


<div id="root">
  <select>
    <option v-for="interval in timeIntervals" :key="interval" :value="interval">{{interval}}</option>
  </select>
</div>

你可以做的是使用模运算符,它将 return 根据除法结果

为真或为假
<option v-for="i in 60" v-if="i % 15 == true">{{ i - 1 }} minutes</option>

此循环将遍历每个值 1...60 并将其除以 15,仅在结果为真时打印结果。

同时使用 v-for 和 v-if 通常是不好的做法,但这会让您到达想要的位置。

结果:

0 minutes
15 minutes
30 minutes
45 minutes