vue elementUI table 懒加载 删除最后一个子数据页面数据还在?


vue 中使用element ui组件的table组件,根据需求逐级通过事件加载它的子数据,用load函数的回调,可以删除大于1条数据的其他数据,当只有一条子数据,再执行删除,就没有效果了,我用 this.$forceUpdate并没有什么用?,.

<el-table
:data="userData"
style="width: 100%;text-align: center"
row-key="id"
border
:indent="30"
lazy
@current-change="expandChange"
:load="getChildrenData"
:tree-props="{children: 'children', hasChildren: 'children'}">
.......
</el-table

getChildrenData(tree, treeNode, resolve){
    this.paramNodes=[tree, treeNode, resolve];
    let v = this;
    v.$http.get(this.API.permissionData,{params:{
            parentId:tree.id
        }})
        .then((resp)=>{
            console.log(resp.body.data);
            if(resp.body.code=='000000'){
                if(resp.body.data){
                    resolve(resp.body.data)
                }else {
                    v.$Message.error(resp.body.info);
                }
            }else {
                v.$Message.error(resp.body.info);
            }
        })
        .catch(function(err) {
            v.$Message.error(err.body.info)
        });
                
  remove (id) {
    let v=this;
    v.$http.delete(`${this.API.getPermissionData}/${id}/v1.0`).then((res)=>{
        if(res.body.code=='000000'){
            v.getChildrenData(...this.paramNodes);
            v.initData();
            this.$Message.success('删除成功!')
        }else {
            v.$Message.error( res.body.info);
        }
    }).catch((err)=>{
        v.$Message.error(err.body.info);
    })

对于这个问题,查了很多的资料也没有结果,询问后大家都没有遇到过这个问题,我就这么幸运的遇上了,是真的难受。遇到出现了,但总是要解决的呀!与我抛弃了寻找它自己的方法,换了一种思路。就有了下面的三种方法:

解决方案:

1、localtion.reload()刷新页面,这种方法问题是可以解决的,但给人的体验感不好,会出现瞬间白页的效果,不好,不好,不 好,重要的事说三遍,放弃。
2、this.$router.go(0),与第一种一样。体验感不好,
3、 provide/inject方式进行方法注入,这下完美了,问题解决了,体验感好。perfect。

<template>
    <div>
        <router-view  v-if="Refresh"></router-view>
    </div>
</template>

    export default {
        name: "APP",
        provide () {
            return {
                reload: this.reload
            }
        },
        data () {
            return {
                Refresh: true
            }
        },
        methods: {
            reload () {
                this.Refresh= false;
                this.$nextTick(function () {
                    this.Refresh= true
                })
            }
        }
    }
	在需要刷新的组件方法中调用  this.reload()即可。

总结:问题是解决了,但是为什么会出现这个问题?是iview 组件还是没有找对方法?欢迎大家来喷…

此方法是一次逛博客收获的,虽然不记得是哪位博主了,但还是要感谢下

Logo

前往低代码交流专区

更多推荐