如何仅定位 v-for 数组中的最后一项?

Posted

技术标签:

【中文标题】如何仅定位 v-for 数组中的最后一项?【英文标题】:How to target only the last item in a v-for array? 【发布时间】:2020-10-04 11:37:35 【问题描述】:

我在 v-for 中有一个对象数组,可以为每个项目创建一个组件,如下所示:

<div v-for="(expense, idx) in myExpenses" :key="idx">
  <expense-panel
     v-model.number="expense.expensesValue"
     :expense="expense"
     :myExpenses="myExpenses"
     :showEdit="showEdit">
   </expense-panel>
</div>

我有一种方法可以在数组中添加额外的“费用”:

(我记录了我要专门针对的项目)

 addExpense() 
      this.myExpenses.push(
        expensesKey: "",
        expensesValue: null,
        subExpense: null,
      );
//The last item in the array
      console.log(this.myExpenses[this.myExpenses.length - 1]);
    ,

Vue中有没有办法专门在数组的最后一项添加输入元素?

我已经在父母的 Data() 中有一个 showInput = false。

【问题讨论】:

【参考方案1】:

例如,您可以将slot 添加到expense-panel 并有条件地在那里渲染your-input,前提是它是要渲染的最后一个项目,如下所示:

<div v-for="(expense, idx) in myExpenses" :key="idx">
  <expense-panel
     v-model.number="expense.expensesValue"
     :expense="expense"
     :myExpenses="myExpenses"
     :showEdit="showEdit">
     <your-input v-if="idx === myExpenses.length - 1" />
   </expense-panel>
</div>

其他选择可能是将道具传递给面板(如is-last)并将输入烘焙到expense-panel

另外,如果输入应该在最后一项之后以视觉方式呈现,您可以简单地在整个列表之后添加输入:

<div v-for="(expense, idx) in myExpenses" :key="idx">
  <expense-panel
     v-model.number="expense.expensesValue"
     :expense="expense"
     :myExpenses="myExpenses"
     :showEdit="showEdit">
   </expense-panel>
</div>
<your-input />

【讨论】:

这么快的反应!我用了你的第一个选项,它奏效了。非常感谢。 我怎么错过了插槽?嘘 有时候你很幸运,得到你答案的人在那一刻正在浏览问题:D 我可以再问你一个问题吗? 当然要问,我想你可以在评论里问!

以上是关于如何仅定位 v-for 数组中的最后一项?的主要内容,如果未能解决你的问题,请参考以下文章

如何定位动态条目网格行中的第一项和最后一项?

RestKit 仅保存响应数组中的最后一项

Vue v-for 循环 - 过滤数组时如何定位组件

Gatsby 源插件仅显示 GraphQL 中数组中的最后一项

如何获取数组 Node.js 中的最后一项? [复制]

Javascript 仅设置数组中最后一项的属性