美文网首页Vue.js开发技巧让前端飞Web 前端开发
Vue splice删除数组元素,dom有变化,但数组的剩余元素

Vue splice删除数组元素,dom有变化,但数组的剩余元素

作者: 竿牍 | 来源:发表于2018-02-28 17:42 被阅读360次

背景:

vue开发一个动态添加和删除表单元素的功能,如图:


动态添加删除表单.PNG

代码:

Html

<H5Header :headOptions="headerOpts"></H5Header>
<!--- <div v-for="(people, index) in peoples"> --->
      <div v-for="(people, index) in peoples" v-if="people">
      <div class="column-header flex flex-vc mt30">
        <h2 class="column-tit flex-1">被保人{{index+1}}</h2>
        <a class="delete-btn" href="javascript:;" otype="button" otitle="删除" @click="deletePerson(index)"></a>
      </div>
      <ItemForm ref="itemFormRef" :data="people"></ItemForm>
    </div>

javascript

methods: {
// 继续添加
      createPerson () {
        this.peoples.push(this.newPerson)
      },
      deletePerson (index) {
        if (this.peoples.length === 1) return
//        this.peoples.splice(index, 1)
          this.peoples.splice(index, 1, null)
      },
...
}

正常来说,在删除子容器时,应该可以直接使用vue中数组的重写方法splice进行删除。
如:

this.peoples.splice(index, 1)

但发现,在删除元素后,总是最后面的元素会被删除,界面dom被重新加载,其实并没有被重新渲染,页面中的vue逻辑没有被正常执行。

尝试过多种方式后还是没有解决,感觉应该是当元素被删除后,后面元素的下标发生变化,导致元素中的内容被重新加载,但又没有被渲染。

因此我最终的解决方案是,如上图中所示

this.peoples.splice(index, 1, null)

注意在html中加上v-if="people"的判断是否显示的条件

将数组中要删除的元素设置为空(用v-if去隐藏),但又不改变数组的排列方式,从而最终解决问题。
但是这种解决方式只能说治标不治本,并不是一种最好的解决办法。
因此我想请问各位大神,有没有什么更好的方式可以解决?

相关文章

网友评论

  • a7f08944854b:在操作了 splice() 后,加上 this.$forceUpdate(); 试下
    木木子_98cc:感谢,找了好久,被一个this.$forceUpdate(); 搞定
    竿牍:@莫默磨墨先生 谢谢关注~,我换了一种实现,把每个item封装成一个组件,可以避免这个问题
  • Dan_8ba2:楼主,请问你这个问题解决了吗?我现在也是这个问题
  • 52e4bcbeb3a7:splice(index,1,null) 去掉null
  • 名字起长一点:splice会改变数组下标,所以想更新数组(删除某个元素),用arr= arr.filter(function (item){return item != xxx}),得到新数组就行
  • 岗伯伯:v-for那里加上:key,每个:key的值要通过特殊方法生成,比如:
    //生成guid ,解决排序
    function guid() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
    var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
    return v.toString(16);
    });
    }
    竿牍:我用的 v-bind:key="index"貌似不可以,我先试一下,谢谢~~

本文标题:Vue splice删除数组元素,dom有变化,但数组的剩余元素

本文链接:https://www.haomeiwen.com/subject/yujixftx.html