Vue.js中如何像PHP一样使用v-for实现倒序循环渲染
问题解答
Vue.js的v-for指令完全可以实现类似PHP的自定义循环逻辑,你当前代码渲染异常、达不到倒序效果是两个原因导致的:
- 第一,
ticket.quantity大概率是字符串类型的"2",Vue的v-for="index in x"语法只有当x是数字类型时,才会从1开始迭代到x生成序列;如果x是字符串,Vue只会把它当成单个元素遍历,这就是你现在只渲染出一个值为2的option的核心原因。 - 第二,就算
ticket.quantity是数字2,默认v-for只会正序遍历出1、2两个值,既不包含你需要的0,也不符合倒序渲染的要求。
推荐实现方案
优先用计算属性生成目标序列,可维护性最高,写法最清晰:
- 先在组件的
computed节点定义选项数组:
computed: { quantityOptions() { const maxNum = Number(this.ticket.quantity) const res = [] // 从最大数倒序push到0,刚好得到目标序列 for (let i = maxNum; i >= 0; i--) { res.push(i) } return res } }
- 模板里直接遍历这个计算属性即可:
<select> <option v-for="item in quantityOptions" :value="item" :key="item" > {{ item }} </option> </select>
轻量化内联写法
如果不想额外写计算属性,也可以直接在模板内完成遍历长度和值的计算,注意要先把数量值转成数字,遍历长度要加1用来包含0值:
<select> <option v-for="n in Number(ticket.quantity) + 1" :value="Number(ticket.quantity) - n + 1" :key="n" > {{ Number(ticket.quantity) - n + 1 }} </option> </select>
这个写法的逻辑是:当ticket.quantity为2时,遍历总长度是3,n依次取1、2、3,通过计算
2 - n +1就能依次得到2、1、0三个值,完全匹配预期渲染效果。
内容的提问来源于stack exchange,提问作者user3666060
相关产品推荐
相关产品推荐

