使用 VueJS 从 table 中删除一行

Removing a row from a table with VueJS

在 Vue 中,如何在删除项目时从 table 中删除一行?

下面是我如何渲染 table

<tbody>
  <tr v-for="item in items">
    <td v-text="item.name"></td>
    <td v-text="item.phone_number"></td>
    <td v-text="item.email"></td>
    <td><button @click="fireDelete(item.id)">Delete</button></td>
  </tr>
</tbody>

以下是我的 Vue 组件的摘录。

data() {
      return {
        items: []
      }
    },

methods: {
    fireDelete(id) {
        axios.delete('/item/'+id).then();
    }
},
mounted() {
      axios.get('/item').then(response => this.items = response.data);
    }

axios.get 有效,axios.delete 也有效,但前端没有反应,因此该项目仅在页面刷新后从 table 中删除。我如何才能删除相关的 <tr>?

您可以尝试将您的 @click="fireDelete(item.id)" 部分修改为自定义方法 @click='deleteData(items, item.id)'

然后做类似的事情:

methods: {
  deleteData (items, id) {
    this.items = null // These parts may not 
    this.fireDelete(id) // match your exact code, but I hope
  }                     // you got the idea.
}

您的模板可以做到:

<tbody>
  <tr v-for="item in items" v-if='items'>
   <td v-text="item.name"></td>
   <td v-text="item.phone_number"></td>
   <td v-text="item.email"></td>
   <td><button @click="deleteData(item,  item.id)">Delete</button></td>
  </tr>
</tbody>

我想出了一个好方法。我将索引传递给 fireDelete 方法并使用拼接函数。完全符合我的要求。

<tbody>
  <tr v-for="(item, index) in items" v-bind:index="index">
    <td v-text="item.name"></td>
    <td v-text="item.phone_number"></td>
    <td v-text="item.email"></td>
    <td><button @click="fireDelete(item.id, index)">Delete</button></td>
  </tr>
</tbody>


fireDelete(id, index) {
        axios.delete('/item/'+id).then(response => this.organisations.splice(index, 1));
      }

我遇到了和这个问题一样的问题。所以也许有人会发现这很有用。

对于 button 使用:

v-if="items.length > 1" v-on:click="fireDelete(index)"

fireDelete 函数:

fireDelete: function (index) { 
    this.photos.splice(index, 1);
}