vue 在父组件中重置子组件 组件状态复原

有时候,需要一键复原组件的状态,这里提供三种方法,分别适用于不同的场景需求。

第一种: v-if

v-if 简单,粗暴的直接控制着这个组件的dom是否重新渲染。

<button @click="handleClick">refresh</button>
<child v-if="showFlag" />

handleClick () { // 不断切换 dom会反复的重新渲染  自然也就达到了恢复初始状态
    this.showFlag = !this.showFlag
}

第一种: key

组件加上key,其实原理上和v-if有些类似。我们知道key的作用是确保dom在diff的时候避免不必要的dom重新渲染,尤其是在循环的时候加上key为了确保元素的唯一性,但是我们可以反其道而行之,给我们需要刷新的组件一个key,这里提供一种场景,就是tab切换时的场景

<el-radio-group v-model="tab">
    <el-radio-button label="tab1"></el-radio-button>
    <el-radio-button label="tab2"></el-radio-button>
    <el-radio-button label="tab3"></el-radio-button>
</el-radio-group>
<child :key="id"/>

// 这里也可以不用watch,也可以用 change 事件
watch: {

    tab (n, o) {

        if (n == 'tab1') {
            this.id = 1;
        } 
        // 下边的情况就不写了  else if 设置不同的id就可以达到目的了
    }
}

第二种: provide inject

这种方法,其实用的不多,一般在根组件设置一个标志,同样是通过v-if配合。这种方法如有兴趣,可自行查询,不在举例,用的不太多。

end~

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值