Vue ElementUI Dialog组件重新渲染的两种方法

1、Dialog组件重新渲染

两种方法:

(1)设置key,强制组件重新渲染

a、直接在key上绑定new Date().getTime()

        <el-dialog title="部门编辑" :visible.sync="dialogFormVisible" @close="closeDialog">
            <!--key直接绑定一个时间,最简单-->
            <dept-edit :id="id" :key="new Date().getTime()" ref="dept"></dept-edit>
            <div slot="footer" class="dialog-footer">
                <el-button @click="dialogFormVisible = false">取 消</el-button>
                <el-button type="primary" @click="Save">确 定</el-button>
            </div>
        </el-dialog>

b、可以把key绑定到一个data上,但一定要在事件中修改data,否则无效

HTML部分

        <el-dialog title="部门编辑" :visible.sync="dialogFormVisible" @close="closeDialog">
            <!--key绑定data中的timer-->
            <dept-edit :id="id" :key="timer" ref="dept"></dept-edit>
            <div slot="footer" class="dialog-footer">
                <el-button @click="dialogFormVisible = false">取 消</el-button>
                <el-button type="primary" @click="Save">确 定</el-button>
            </div>
        </el-dialog>

data部分

        data() {
            return {
                tableData: [],
                dialogFormVisible: false,
                id: 0,
                refresh:false,
                timer:new Date().getTime()  //声明timer
            }
        },

js修改时间

            handleEdit(index, row) {
                //弹窗
                this.dialogFormVisible = true;
                this.refresh = true;
                this.id = row.id;
                var that = this;
                this.timer = new Date().getTime();  //弹窗加载时修改timer
            }

2、使用v-if的方式

初始加载时,data中设置的refresh为false,同时在dialog中设置v-if,弹窗显示时设置为refresh为true,弹窗关闭时refresh为false

HTML部分

        <!--通过v-if绑定refresh,同时设置close事件-->
        <el-dialog title="部门编辑" :visible.sync="dialogFormVisible" v-if="refresh" @close="closeDialog">
            <dept-edit :id="id" ref="dept"></dept-edit>
            <div slot="footer" class="dialog-footer">
                <el-button @click="dialogFormVisible = false">取 消</el-button>
                <el-button type="primary" @click="Save">确 定</el-button>
            </div>
        </el-dialog>

初始加载时,data中设置的refresh为false

        data() {
            return {
                tableData: [],
                dialogFormVisible: false,
                id: 0,
                refresh:false
            }
        }

弹窗显示时设置refresh为true

            handleEdit(index, row) {
                //弹窗
                this.dialogFormVisible = true;
                this.refresh = true;  //弹窗显示时设置为true
                this.id = row.id;

            }
弹窗关闭时设置refresh为false
            //弹窗关闭时设置refresh为false
            closeDialog(){
                this.refresh = false;
            }

 

上一篇:ElementUI 实现el-table 列宽自适应


下一篇:vue+elementui输入框限制(只能输入0和正整数)