点击取消按钮,console出来数据更改了,页面视图没有更新

点击取消按钮,console出来数据更改了,页面视图没有更新


前言

实现效果:点击取消按钮,页面视图全部为空,

遇到的问题: 点击取消按钮,console出来数据更改了,SchemaJson 都是默认值啦,页面视图没有更新

方法:使用 key 属性实现局部强制刷新


bash 复制代码
<template>
    <div class="app-container">
        <el-form :model="fromModel" label-width="100px" :rules="rules" ref="FormRef" >
            <el-form-item label="数据格式">
                <json-schema :schema.sync="fromModel.SchemaJson" :show-default-value="true"
                    :is-mock="false"></json-schema>
            </el-form-item>
            <el-form-item>
                <el-button type="primary" :loading="upload.isUploading">确 定</el-button>
                <el-button @click="cancel">取 消</el-button>
            </el-form-item>
        </el-form>
    </div>
</template>

<script>

import jsonSchema from '../json-schema-editor.vue'

export default {
    name: "algorithmCom",
    components: { uploadCom, jsonSchema },
    data() {
        return {

            upload: {
                isUploading: false,
            },
            fromModel: {
                SchemaJson: {
                    "type": "object",
                    "properties": {
                    },
                },
            },
            rules: {},
        };
    },

    methods: {

        cancel() {
            this.fromModel = {
                SchemaJson: {
                    "type": "object",
                    "properties": {},
                }
            };

            this.upload.isUploading = false;
            this.$nextTick(() => {
                this.$refs.FormRef.resetFields();
            });
            console.log(this.fromModel)
        },
    },
    computed: {},
};
</script>

通过排查发现

使用 key 属性实现局部强制刷新

原理:

在 Vue 中,给组件或者 DOM 元素添加 key 属性,当 key 值改变时,Vue 会认为这是一个全新的元素,从而重新创建和渲染它以及它内部的子元素,达到强制局部刷新的效果。

应用示例:

首先,在你希望实现局部刷新的表单元素外层添加 key 属性,并在 data 中定义对应的响应式数据来控制这个 key 值,比如针对整个 el-form 表单区域进行局部刷新:

bash 复制代码
   <el-form :model="fromModel" label-width="100px" :rules="rules" ref="FormRef" :key="formKey"> </el-form>

然后在 data 函数里添加 formKey 这个响应式数据:

bash 复制代码
  data() {
        return {
            // 用于控制 key 值变化,实现局部刷新
            formKey: 0
        };
    },

最后,在 cancel 方法中改变 formKey 的值来强制表单区域重新渲染,实现局部刷新:

bash 复制代码
   cancel() {
            this.fromModel = {
                SchemaJson: {
                    "type": "object",
                    "properties": {},
                }
            };
            this.upload.isUploading = false;
            // 改变 key 值,触发局部重新渲染
            this.formKey++;
            this.$nextTick(() => {
                this.$refs.FormRef.resetFields();
            });
        },

Ending...

相关推荐
再__努力1点9 分钟前
【77】积分图像:快速计算矩形区域和核心逻辑
开发语言·图像处理·人工智能·python·算法·计算机视觉
VX:Fegn089511 分钟前
计算机毕业设计|基于springboot + vue乡村振兴服务系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
Evand J17 分钟前
【2026课题推荐】基于小波/互相关/FFT的卡尔曼滤波的轨迹估计,及MATLAB例程的运行结果
开发语言·matlab·目标跟踪·轨迹跟踪
独自归家的兔24 分钟前
Java Robot 详解:系统级鼠标 / 键盘模拟的核心原理与实战
java·开发语言
梵尔纳多26 分钟前
Electron 主进程和渲染进程通信
javascript·arcgis·electron
小灰灰搞电子30 分钟前
Qt 开发环境选择Qt Creator、Visual Studio还是 VS Code?
开发语言·qt·visual studio
何中应31 分钟前
Bean的三种注入方式
开发语言·spring boot·后端·spring
wanghowie1 小时前
01.03 Java基础篇|面向对象核心与设计实践
java·开发语言
巴拉巴拉~~1 小时前
Flutter 通用滑块组件 CommonSliderWidget:单值 / 范围 + 刻度 + 标签 + 样式自定义
开发语言·前端·javascript
是苏浙1 小时前
零基础入门Java之设计图书管理系统
java·开发语言