el-dialog 里面的组件不刷新问题

本文探讨了如何在每次打开Element UI的el-dialog时强制重新初始化内容,以避免用户权限缓存问题。通过设置destroy-on-close属性和使用v-if指令,确保每次关闭后清空弹框内容,实现了弹框内容的每次都独立加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

el-dialog里面的内容是带缓存的,也就是说除了第一次打开会初始化,其他次打开都是直接加载缓存的。

我们想每次打开el-dialog都要初始化,比如用户的权限弹框,每次打开我们都要把用户拥有的权限选中,类似的操作,如果加载了缓存,这就会导致每个用户回填的权限都一样了。

如果我们在每次关闭弹框时把弹框里面的内容删掉,这样打开时就会初始化了。

查阅了 Dialog 对话框 相关文档:

在这里插入图片描述

文档中有,我们可以设置为 :destroy-on-close=“true” 试一试。

<el-dialog
     title="日志查看"
     :visible.sync="dialogLogsVisible"
     fullscreen
     center
     **:destroy-on-close="true"**
 >
    <sys-business-log-list :record-name="recordName" :record-id="recordId" />
    <div slot="footer" class="dialog-footer">
        <el-button @click="dialogLogsVisible=false">{{ $t('cancel') }}</el-button>
    </div>
</el-dialog>

打开时 渲染的内容如下:

image-20200926202453369

关闭时 渲染的内容如下:

image-20200926202313957

什么鬼,怎么只是加了个属性 display: none; ,说好的关闭销毁元素呢。

没办法了,不能自动销毁里面的内容,那我们手动销毁吧,

直接在内容上加上属性 v-if="dialogLogsVisible"

<el-dialog
  title="日志查看"
  :visible.sync="dialogLogsVisible"
  fullscreen
  center
  :destroy-on-close="true"
 >
    <sys-business-log-list 
       v-if="dialogLogsVisible" 
       :record-name="recordName" 
       :record-id="recordId" 
    />
    <div slot="footer" class="dialog-footer">
        <el-button @click="dialogLogsVisible=false">{{ $t('cancel') }}</el-button>
    </div>
</el-dialog>

这样每次关闭弹框都会把内容直接移除了,现在终于不会缓存了

Vue刷新`el-dialog`组件里面的数据通常指的是在`el-dialog`弹窗显示后,更新其内部的数据而重新打开弹窗。由于`el-dialog`本身并是一个数据模型,而是显示数据的视图组件,所以我们通常需要更新提供给`el-dialog`的数据源,从而触发视图的更新。下面是一个简单的操作步骤: 1. 确保你有一个数据模型(通常是组件的data属性里的一个变量)来绑定给`el-dialog`的内容。 2. 使用`v-model`来创建一个双向数据绑定,使得`el-dialog`显示的数据可以与数据模型同步。 3. 在需要刷新数据的时机,比如在一个方法中或点击事件中,更新这个数据模型。 4. Vue将会检测到数据的变化,并且自动将新数据渲染到绑定的`el-dialog`中。 以下是一个代码示例: ```html <template> <el-dialog v-model="dialogVisible" title="提示"> <!-- 这里的content就是我们绑定的数据 --> <span>{{ content }}</span> <div slot="footer"> <el-button @click="dialogVisible = false">取 消</el-button> <el-button type="primary" @click="updateContent">确 定</el-button> </div> </el-dialog> </template> <script> export default { data() { return { dialogVisible: false, content: &#39;&#39; // 这里是初始数据 }; }, methods: { openDialog() { this.dialogVisible = true; }, updateContent() { // 在这里更新你的数据模型 this.content = &#39;新内容&#39;; // 更新了content的值 this.$nextTick(() => { // 关闭弹窗,为下一次打开刷新数据做准备 this.dialogVisible = false; }); } } }; </script> ``` 在这个例子中,我们有一个`content`数据模型和一个控制`el-dialog`显示的`dialogVisible`。当调用`updateContent`方法时,我们更新了`content`的值,由于`el-dialog`绑定了`content`,所以它会自动更新显示的内容。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值