1、需求

使用Vue + Element UI 实现在列表的操作栏新增一个复制按钮,复制当前行的数据可以打开新增弹窗后亦可以跳转到新增页面,本文实现为跳转到新增页面。

2、实现

1)列表页 index.vue

<el-table>
<!-- 其他列 -->
<el-table-column label="操作" width="150">
<template slot-scope="scope">
<el-button icon="el-icon-copy-document" title="复制" @click="toCopyNew(scope.row)"></el-button>
</template>
</el-table-column>
</el-table>

方法部分:用id来区分,正常新增id为0,复制id不为0

methods: {
// 复制
toCopyNew (item) {
const { url } = this.$getKey('这是是业务权限值,不需要这里可以不写')
this.$router.push(`/${url}-New/${item.Id}`)
},
}

2)新增页 New.vue

data () {
return {
id: this.$route.params.id,
dataList: [],
form: {
Name: '',
BG: '',
InfoJson: [],
},
rules: {
Name: [
{ required: true, message: '请输入名称', trigger: 'blur' },
],
BG: [
{ required: true, message: '请选择所属组织', trigger: 'change' },
],
InfoJson: [
{ required: true, message: '请选择集合', trigger: 'blur' },
],
},
submitLoading: false,
}
},
created () {
if (this.id !== '0') {
this._getDetail()
}
},
methods: {
async _getDetail () {
try {
// 获取详情接口
const data = await GetInfo({
Id: this.id * 1,
})
if (data) {
this.form = data
this.form.id = ''
this.form.Name = data.Name
this.form.BG= { Id: data.BG_Id, Name: data.BG_Name }
this.form.InfoJson= JSON.parse(data.InfoJson)
this.dataList = this.form.InfoJson
}
} catch (error) {}
},
}

3)问题

按上述代码操作后,点击列表操作栏的复制按钮会跳转到新增页面并且将当前行的数据复制到对应各个组件内,数据呈现和保存正常,但是发现了一个问题,数据无法修改,网上查阅资料应该异步获取详情信息且数据获取时打印输出下返回数据是否有问题等,具体分析如下

① 异步问题

确保数据的获取是异步完成的。如果你的数据是通过异步请求获取的,确保在数据返回之前不要执行任何赋值操作。你可以使用async/await或者.then()语法确保异步请求完成后再进行赋值。

② 数据是否正确

确保你查询到的数据是正确的。你可以在控制台打印查询到的数据,确保它包含你所需的信息。

③ Reactivity(响应性)

Vue.js中的响应性是通过数据属性的getter和setter来实现的。确保你正在使用Vue.js的响应性系统来更新数据。如果你是在异步操作中修改数据,确保在Vue.js的上下文中执行这些操作。

④ 组件是否正确渲染

确保组件已正确渲染,并且你正在尝试更改的数据在组件中可见。你可以在组件的模板中使用双花括号 {{ variable }} 来输出数据,以确保它们正在正确显示。

4)解决

经过排查,本文问题为周期和响应性问题,具体修改为调整周日created为mounted,调整数据返回的赋值方式改为响应式获取,思路和代码如下:

① 之前在 created 钩子中异步调用方法,可能会导致在数据获取之前组件渲染完成,这可能导致数据无法正确地绑定到组件。将数据获取移动到 mounted 钩子中,因为 mounted 钩子在组件已经挂载到 DOM 后触发,这时候可以确保组件已经渲染完成。
② Vue.js 需要对象是响应式的才能在数据更改时触发视图更新。确保你的 form 对象是在 data 中声明的,并且使用了 Vue.set 或 this.$set 来确保嵌套属性的响应性。
mounted () {
if (this.id !== '0') {
this._getDetail()
}
},
methods: {
async _getDetail () {
try {
// 获取详情接口
const data = await GetInfo({
Id: this.id * 1,
})
if (data) {
this.form = data
this.form.id = ''
// 使用 Vue.set 或 this.$set 来确保响应性
this.$set(this.form, 'Name', data.RG_Name)
this.$set(this.form, 'Sign', data.RG_Sign)
this.$set(this.form, 'BG', { Id: data.BG_Id, Name: data.BG_Name })
this.$set(this.form, 'Sign', data.RG_Sign)
this.$set(this.form, 'RuleJson', JSON.parse(data.RuleJson))
this.dataList = this.form.RuleJson
}
} catch (error) {}
},
}

5)其他方便排查的原因在此做个列举

① 确保数据绑定正确

在模板中使用双花括号 {{ variable }} 输出数据,确保数据正确地绑定到组件。例如,你可以在模板中添加一些输出语句:

<template>
<div>
{{ form.Name }}
{{ form.BG }}
<!-- 其他组件的输出语句 -->
</div>
</template>

这将帮助你确定是否有数据正确地传递到了组件

② 检查数据类型和结构

确保 GetInfo 返回的数据与你在 New.vue 中的期望一致。可以在 mounted 钩子中使用 console.log(data) 来查看获取的数据结构。

async _getDetail () {
try {
const data = await GetInfo({
Id: this.id * 1,
})
console.log(data); // 查看数据结构
// ... 其他代码
} catch (error) {}
}

③ 检查是否有报错信息

查看浏览器控制台是否有任何错误消息。可能有网络请求问题或其他导致数据无法正确加载的问题。

④ 确保组件的 form 数据对象是响应式的

Vue.js 需要对象是响应式的才能在数据更改时触发视图更新。确保你的 form 对象是在 data 中声明的,并且使用了 Vue.set 或 this.$set 来确保嵌套属性的响应性。如本文解决办法

若本文有帮助到阅读本文的同学,欢迎点赞、关注、收藏,互相学习交流。

Vue + Element UI 实现复制当前行数据功能(复制到新增页面组件值不能更新等问题解决)的更多相关文章

  1. Vue + Element UI 实现权限管理系统 前端篇(十三):页面权限控制

    权限控制方案 既然是后台权限管理系统,当然少不了权限控制啦,至于权限控制,前端方面当然就是对页面资源的访问和操作控制啦. 前端资源权限主要又分为两个部分,即导航菜单的查看权限和页面增删改操作按钮的操作 ...

  2. 基于 vue+element ui 的cdn网站(多页面,都是各种demo)

    前言:这个网站持续更新中...,有网上预览,github上也有源码,喜欢记得star哦,欢迎留言讨论. 网站地址:我的个人vue+element ui demo网站 github地址:yuleGH g ...

  3. 分享一个自搭的框架,使用Spring boot+Vue+Element UI

    废弃,新的:https://www.cnblogs.com/hackyo/p/10453243.html 特点:前后端分离,可遵循restful 框架:后端使用Spring boot,整合了aop.a ...

  4. vue + element ui 表格自定义表头,提供线上demo

    前言:工作中用到 vue+element ui 的前端框架,需要使用自定义表头,需要使用 re.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9710826.h ...

  5. vue+element ui 的表格列使用组件

    前言:工作中用到 vue+element ui 的前端框架,有这个场景:很多表格的列有许多一样的,所以考虑将列封装为组件.转载请注明出处:https://www.cnblogs.com/yuxiaol ...

  6. Vue+element ui table 导出到excel

    需求: Vue+element UI table下的根据搜索条件导出当前所有数据 参考: https://blog.csdn.net/u010427666/article/details/792081 ...

  7. 基于vue(element ui) + ssm + shiro 的权限框架

    zhcc 基于vue(element ui) + ssm + shiro 的权限框架 引言 心声 现在的Java世界,各种资源很丰富,不得不说,从分布式,服务化,orm,再到前端控制,权限等等玲琅满目 ...

  8. Vue + Element UI 实现权限管理系统

    Vue + Element UI 实现权限管理系统 前端篇(一):搭建开发环境 https://www.cnblogs.com/xifengxiaoma/p/9533018.html

  9. vue + element ui 实现实现动态渲染表格

    前言:之前需要做一个页面,能够通过表名动态渲染出不同的表格,这里记录一下.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9786326.html 网站地址:我的 ...

  10. vue+element ui 的上传文件使用组件

    前言:工作中用到 vue+element ui 的前端框架,使用到上传文件,则想着封装为组件,达到复用,可扩展.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9 ...

随机推荐

  1. 2023牛客暑期多校训练营4 AFHJL

    比赛链接 A 题解 知识点:KMP,构造. 考虑构造全 \(0,1\) 串,至少有一个可行. 我们只需要考虑到 \(t\) 的border \(t'\) ,即 \(t'+s+t'\) : 当 \(t' ...

  2. arrch架构部署redis,报错: ignore-warnings ARM64-COW-BUG

    arrch架构服务器redis部署完成后,启动报错.做个记录. arrch架构的redis安装包 下载链接:https://pan.baidu.com/s/1TMXNpMvMDWRFD1f5km7Mw ...

  3. Jmeter+Ant+Jenkins接口自动化测试平台

    一个完整的接口自动化测试平台需要支持接口的自动执行,自动生成测试报告,以及持续集成. Jmeter 支持接口的测试, Ant 支持自动构建,而 Jenkins 支持持续集成,所以三者组合在一起可以构成 ...

  4. 9、Mybatis之动态SQL

    9.1.环境搭建 9.1.1.创建新module 创建名为mybatis_dynamicSQL的新module,过程参考5.1节 9.1.2.创建Emp实体类 package org.rain.myb ...

  5. 深入探讨安全验证:OAuth2.0、Cookie与Session、JWT令牌、SSO与开放授权平台设计

    什么是认证和授权?如何设计一个权限认证框架? 认证和授权是安全验证中的两个重要概念.认证是确认身份的过程,用于建立双方之间的信任关系.只有在认证成功的情况下,双方才可以进行后续的授权操作.授权则是在认 ...

  6. 从原理聊 JVM(五):JVM 的编译过程和优化手段

    一.前端编译 前端编译就是将Java源码文件编译成Class文件的过程,编译过程分为4步: 1 准备 初始化插入式注解处理器(Annotation Processing Tool). 2 解析与填充符 ...

  7. Ubuntu Linux 更换国内源

    Ubuntu的官方源对于国内用户来说是比较慢的,可以将它的源换成国内的源,用起来就快很多了. # Ubuntu server 环境 ubuntu@ubuntu:~$ sudo su - [ sudo ...

  8. 一个 Java 接口快速开发框架:magic-api

    一.简介 magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口.无需定义Controller.Service.Dao.Ma ...

  9. COF框架集成mongodb驱动

    今天打算在我的COF框架中集成mongodb驱动,这实在是简单的工作,因为基本上只是对pymongo的封装 数据库的集成大同小异,要考虑的点无非是以下几点: 1.命名 2.连接创建 3.连接池管理 4 ...

  10. 5.0 CRC32校验技术概述

    CRC校验技术是用于检测数据传输或存储过程中是否出现了错误的一种方法,校验算法可以通过计算应用与数据的循环冗余校验(CRC)检验值来检测任何数据损坏.通过运用本校验技术我们可以实现对特定内存区域以及磁 ...