【问题标题】:Delete row from Vue Js dynamic array从 Vue Js 动态数组中删除行
【发布时间】:2018-02-12 03:43:32
【问题描述】:

我正在尝试在 Vue.js 中创建一个动态表。我能够正确添加行,但是当我尝试删除该行时,每次默认情况下都会删除最后一行。 即使我对索引号进行了硬编码,结果仍然相同。

已经 2 天了,我陷入了这个问题。感谢任何帮助。

我的模板:

<div class="box-body">
        <table id="myTable" class="table">
          <thead>
          <tr class="timesheetTableHeader">
            <th style="width: 50rem">Project</th>
            <th style="width: 40rem">Activity</th>
            <th style="width: 20rem">Charge Back</th>
            <th style="width: 10rem">Hours</th>
          </tr>
          </thead>
          <div class="mt-2"></div>
          <tbody>
          <tr v-for="(row, index) in rows">
            <td>
              <mwselect :options="Project"
                        v-model="row.projectName"
              ></mwselect>
            </td>
            <td>
              <mwselect :options="Activity"
                        v-model="row.activity"
              ></mwselect>
            </td>
            <td>
              <mwselect :options="CostCenter"
                        v-model="row.chargeBackCC"
              ></mwselect>
            </td>
            <td>
              <b-form-input type="number"
                            class="pb-1 pt-1"
                            required
                            v-model="row.hours"
                            name="Hours">
              </b-form-input>
            </td>
            <td>
              <a @click="removeElement(index)" style="cursor: pointer">
                <i class="fa fa-trash-o pt-1" style="color:red; text-shadow: 1px 1px 1px #ccc;
font-size: 1.5em;" title="Delete Line"
                ></i></a>
            </td>
          </tr>
          </tbody>
        </table>
      </div>

我的脚本:

 <script>
 var period_name = ''
 var start_date = ''
 var end_date = ''
 var counter = 0
 export default {
components: {
  mwselect
},
data() {
  return {
    Project: projects,
    CostCenter: costcenter,
    Activity: activities,
    rows: []
  }  // return end
},
methods: {
  createLine(index) {
    var elem = document.createElement('tr');
    this.rows.push({
      projectName: "",
      activity: "",
      chargeBackCC: "",
      hours: ""
    })
  },
  removeElement: function (index) {
    alert(index)
    this.rows.splice(index, 1);
  }
}
 }
 </script>

【问题讨论】:

    标签: vue.js vuejs2


    【解决方案1】:

    除非您将 key 属性放入 for 循环,否则无法保证排序。所以对你的标签的这个改变必须解决这个问题:

    &lt;tr v-for="(row, index) in rows" :key="index"&gt;

    这里是关于属性key的更多信息:https://vuejs.org/v2/guide/list.html#key

    【讨论】:

    • 您好,感谢您的建议。我进一步查看,发现该行已正确删除,但由于我在几列中使用自定义组件“mwselect”;因此不会根据行删除此组件数据。而是删除最后一行组件数据。
    【解决方案2】:

    感谢 Cmertayak,

    添加 :key="index" 有效,它解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-12
      • 2018-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      相关资源
      最近更新 更多