首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue 2-子组件道具数组在父项删除后不更新。

Vue 2-子组件道具数组在父项删除后不更新。
EN

Stack Overflow用户
提问于 2022-08-10 05:00:54
回答 2查看 137关注 0票数 -1

我尝试调试这个问题已经有一段时间了。每当我从父节点中删除疫苗时--子组件不会从视图中删除该项(我验证了索引并在父目录中记录了疫苗数组--记录了正确的数组长度,包括已删除的项)。但是,子组件不会从vue中删除已删除的项。我还试图从DB中重新获取疫苗,但仍然无法更新视图

有趣的是,当我创建一个新的疫苗(post API)并重新获取值-疫苗项目填充子表没有任何问题。同样,这种情况只发生在delete中。

我尝试过将疫苗道具设置为数据(重命名为vaccineItems),但这似乎仍然没有使vaccineItems产生反应性。我也知道不鼓励使用$set。

任何帮助都要事先表示感谢和感谢。父组件

疫苗抽屉(父母)

代码语言:javascript
复制
 <VaccineTable
    :vaccines="vaccines"
     @deleteVaccine="openDeleteConfirmModal"
 />

疫苗抽屉(家长)删除方法

代码语言:javascript
复制
    deleteVaccineSuccess(index) {
        this.vaccineToDelete = null;
        this.vaccines.splice(index, 1) // this is the correct index
        console.log(this.vaccines) // correctly logs the array of vaccine including the deleted item      
     }

..。疫苗表(儿童)

代码语言:javascript
复制
...
   <div class="dod-table-row" :key="vaccine.uuid" v-for="(vaccine, index) in vaccines">
       {{vaccine.name}}...
    <button @click="deleteVaccine(vaccine, index)">Delete</button>


   </div>

const Name = 'VaccineTable';

const props = {
    vaccines: {
        type: Array,
        required: true,
    },
    vaccineStatus: Number,
    required: true,
    ....
    methods = {    
      deleteVaccine(vaccine, index) {
        this.$emit('deleteVaccine', vaccine, index);
    },

};
EN

回答 2

Stack Overflow用户

发布于 2022-08-10 06:15:14

道具总是有反应的。因此,父母所做的任何改变/修改也会反映在孩子身上。

您的代码看起来只是正确的,它应该可以工作,我只是创建了一个简单的代码片段供您参考。请看一看,找出根本原因。

代码语言:javascript
复制
Vue.component('vaccinetable', {
  props: ['vaccines'],
  template: `<div><div v-for="(vaccine, index) in vaccines" :key="index">
       {{vaccine}}
    <button @click="deleteVaccine(index)">Delete</button>
   </div></div>`,
   methods: {
    deleteVaccine(index) {
        this.$emit('delete-vaccine', index);
    }
   }
});

var app = new Vue({
  el: '#app',
  data: {
    vaccines: ['Vaccine 1', 'Vaccine 2', 'Vaccine 3', 'Vaccine 4', 'Vaccine 5']
  },
  methods: {
    deleteVaccine(index) {
        this.vaccines.splice(index, 1);
    }
  }
});
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <VaccineTable :vaccines="vaccines" @delete-vaccine="deleteVaccine">
  </VaccineTable>
</div>

票数 0
EN

Stack Overflow用户

发布于 2022-08-10 06:51:08

因为你在父母创建后改变了数据疫苗(我猜),

@Rohμt Jíndal的演示之所以有效,是因为数据没有变化。

在vue2中,您应该使用以下方法更改数组:

代码语言:javascript
复制
push()
pop()
shift()
unshift()
splice()
sort()
reverse()

代码语言:javascript
复制
vm.items.length = newLength,
vm.items[indexOfItem] = newValue

不能观察,https://v2.vuejs.org/v2/guide/list.html#Array-Change-Detection

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73300830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档