问题描述
我正在尝试用跳过15个单位的数字进行选择(选择分钟:0分钟,15分钟,30分钟,45分钟),我已经使用EJS进行了选择:
<% for(let x = 0; x < 60; x+= 15) { %>
<option value="<%= x %>"><%= x %> minutes</option>
<% } %>
它可以在EJS中使用,但是现在我正在将该组件迁移到Vue 3组件,但是我不知道该怎么做,因为for跳过了15个单位,在vue中我可以使用a跳过1个单位:
<option v-for="i in 60" :key="i" :value="i">{{ i }} minutes</option>
那么我该如何将EJS代码“翻译”为Vue?非常感谢!
解决方法
评论
因为只有四个可能的值,所以我可能只是将它们硬编码在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>
我在计算属性中生成了interval数组,然后在模板内部使用该数组显示每个间隔
带有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>
,
您可以使用Modulo运算符,该运算符将根据除法结果返回true或false
<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