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

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 = datathis.form.id = ''this.form.Name = data.Namethis.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 = datathis.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 来确保嵌套属性的响应性。如本文解决办法

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/163803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JOSEF 漏电继电器 LLJ-100FG φ45 50-500mA 卡轨安装

系列型号&#xff1a; LLJ-10F(S)漏电继电器LLJ-15F(S)漏电继电器LLJ-16F(S)漏电继电器 LLJ-25F(S)漏电继电器LLJ-30F(S)漏电继电器LLJ-32F(S)漏电继电器 LLJ-60F(S)漏电继电器LLJ-63F(S)漏电继电器LLJ-80F(S)漏电继电器 LLJ-100F(S)漏电继电器LLJ-120F(S)漏电继电器LLJ-125F(S…

推荐一个简单的在线压缩PNG和JPG图片大小的网址

问题描述&#xff1a;推荐一个简单的在线压缩PNG和JPG图片大小的网址 解决&#xff1a; https://www.iloveimg.com/zh-cn/compress-image/compress-png

将对象转成URL参数

背景 有的时候前端跳转到其他平台的页面需要携带额外的参数&#xff0c;需要将对象转成用 & 连接的字符串拼接在路径后面。 实现方法

C++中对SQLite进行增删改查

#include <iostream> #include <sqlite3.h>// 创建数据库连接 sqlite3* OpenDatabase(const char* dbFilePath) {sqlite3* db;// 打开数据库if (sqlite3_open(dbFilePath, &db) ! SQLITE_OK) {std::cerr << "Error opening database." <<…

HTTP ERROR 403 No valid crumb was included in the request

1、报错截图&#xff1a; 2、产生原因&#xff1a; 开启了csrf&#xff0c;即跨站请求伪造 3、新版本不支持页面修改&#xff0c;故需要修改jenkins配置文件 3.1 进入编辑配置文件 vim /etc/sysconfig/jenkins 3.2 修改JENKINS_JAVA_OPTIONS&#xff0c;并保存修改 JENKI…

深度学习之四(循环神经网络Recurrent Neural Networks,RNNs)

概念 循环神经网络(Recurrent Neural Networks,RNNs)是一类专门用于处理序列数据的神经网络,它在处理时考虑了序列数据的顺序和上下文信息。RNNs 在自然语言处理、时间序列分析、语音识别等领域得到广泛应用。 1. 基本结构: RNN 的基本结构包含一个或多个循环单元,每个…

Ubuntu 系统上使用 QQ 邮箱的 SMTP 服务器发送邮件,msmtp(已验证)

安装 msmtp sudo apt-get update sudo apt-get install msmtp2 .配置 msmtp nano ~/.msmtprcdefaults auth on tls on tls_starttls on tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile ~/.msmtp.logaccount qq host …

Lua脚本解决redis实现的分布式锁多条命令原子性问题

线程1现在持有锁之后&#xff0c;在执行业务逻辑过程中&#xff0c;他正准备删除锁&#xff0c;而且已经走到了条件判断的过程中&#xff0c;比如他已经拿到了当前这把锁确实是属于他自己的&#xff0c;正准备删除锁&#xff0c;但是此时他的锁到期了&#xff0c;那么此时线程2…

Android : ExpandableListView(折叠列表) +BaseExpandableListAdapter-简单应用

示例图&#xff1a; 实体类DemoData.java package com.example.myexpandablelistview.entity;public class DemoData {private String content;private int img;public DemoData(String content, int img) {this.content content;this.img img;}public String getContent()…

STM32——外部中断

文章目录 0.中断关系映射1.使能 IO 口时钟&#xff0c;初始化 IO 口为输入2.设置 IO 口模式&#xff0c;触发条件&#xff0c;开启 SYSCFG 时钟&#xff0c;设置 IO 口与中断线的映射关系。3.配置NVIC优先级管理&#xff0c;并使能中断4.编写中断服务函数。5.编写中断处理回调函…

springboot多数据源集成

springboot多数据源集成 1、添加依赖2、添加配置3、代码使用4、动态切换数据库 1、添加依赖 <!--多数据源--> <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version…

[个人笔记] Windows的IT运维笔记

IT技术 - 运维篇 第二章 Windows的IT运维笔记 IT技术 - 运维篇系列文章回顾一、Windows10专业版添加gpedit.msc二、海康威视前端页面导出通道名称参考链接 系列文章回顾 第一章 快速下载微软评估版本镜像的方法 一、Windows10专业版添加gpedit.msc 执行以下bat脚本 echo off…

Rust使用iced构建UI时,如何在界面显示中文字符

注&#xff1a;此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库&#xff0c;用于为rust语言程序构建UI界面。 iced的基本逻辑是&#xff1a; UI交互产生消息message&#xff0c;message传递给后台的update&#xff0c;在这个函数中编写逻辑&#xff0c;然后通过…

护法革命:CIMIVO+SOTUY洗前发膜让发丝重获“芯”生

爱美之心人皆有之,经常烫染或者是在太阳下暴晒,都会对发丝造成一定的伤害,一旦发丝受损,就会导致发芯内部角蛋白流失、化学键连接断裂,进而出现各种发质问题。为此,日本知名化妆品集团NABOCUL旗下发芯修护引领品牌ENNEO创新研发两大核心成分:CIMIVO、SOTUY,能够从根源修护发芯内…

EXCEL小技巧

1、两列文本合并显示&#xff1a; CONCATENATE(B6,E6) &#xff08;如果显示公式而非文本&#xff0c;就是公式输错了&#xff0c;比如后缺少空格&#xff09;

mac 终端配置

Mac iTerm2 配置 安装 brew install iTerm2安装完成之后&#xff0c;需要重新打开终端&#xff0c;既可以看见安装 iTerm2 的效果。 iTerm2 美化 使用 oh-my-zsh 美化 iTerm2 终端 安装 brew install wget sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/mast…

宇宙工具箱:办公娱乐两不误堪称手机的百宝箱

宇宙工具箱 宇宙工具箱&#xff0c;提供大量实用工具&#xff0c;多种类型尽在其中&#xff0c;支持图片/视频处理、计算、查询、娱乐等多方内容&#xff0c;满足用户使用需求&#xff0c;超多工具直接使用。 获取资源 详细获取地址请点击 宇宙工具箱 功能特点 1、计算工具…

【硬核HeyGen平替】在window平台上使用MyHeyGen

最近在研究HeyGen的平替开源项目&#xff0c;然后发现了MyHeyGen这个项目&#xff0c;但是文档上面并没有说明如果在window平台上使用&#xff0c;考虑到非window平台安装显卡驱动什么的比较繁琐&#xff0c;所以尝试硬着头皮干... 前提 开源项目中所需的环境准备要先准备好 1…

测试15k薪资第1步 —— 自动化测试理论基础

目录 1、自动化测试定义 2、自动化测试分类&工具 3、未来发展趋势 1.1、什么是自动化测试 自动化测试指的是利用软件工具或脚本来执行测试任务&#xff0c;以替代手动测试过程的一种测试方法。它的主要目的是通过自动化执行、验证和评估软件应用的功能、稳定性、性能等方面…

Kotlin(十一) 标准函数with、run和apply

with with函数接收两个参数&#xff1a;第一个参数可以是一个任意类型的对象&#xff0c;第二个参数是一个Lambda表达式。with函数会在Lambda表达式中提供第一个参数对象的上下文&#xff0c;并使用Lambda表达式中的最后一行代码作为返回值返回。示例代码如下&#xff1a; va…