若依学习 后端传过来的数据在控制台打印为空

news2024/10/28 6:56:07

导言:

  在做若依二次开发时遇到个没见过的bug,用了一些时间排,发现有自己没学过的东西。所以记录一下。后端用的是c#的asp.net core

问题描述:

   后端穿过来的有数据的参数(数组)roleIds在控制台打印为空

后端字段定义:

后端数据:

前端方法:

在...\src\views\system\user\index.vue的修改按钮

    /** 修改按钮操作 */
    handleUpdate(row) {
      console.log("row",row);
      
      this.reset();
      const userID = row.userID || this.ids;
      console.log("修改按钮操作userID",userID);
      
      // getUserProfile(userID).then(response => {
        GetUserUpdateInfo(userID).then(response => {
          console.log("用户修改responseresponse",response);
        
        this.form = response.data;
        this.postOptions = response.posts;
        this.roleOptions = response.roles;
        // this.$set(this.form, "postIds", response.postIds);
        this.$set(this.form, "roleIds", response.roleIds);
        this.open = true;
        this.title = "修改用户";
        this.form.password = "";
      });
    },
打印与问题:

控制台网络

拦截器打印:

在...\src\utils\request.js

// 响应拦截器
service.interceptors.response.use(res => {
  console.log("响应拦截器",res);
...

方法响应值打印:

...
// getUserProfile(userID).then(response => {
        GetUserUpdateInfo(userID).then(response => {
          console.log("用户修改responseresponse",response);
...

可以看到,在控制台的网络中后端传来的roleIds数组是有值的,但是在拦截器和方法响应数据中却变成了空数组。

解决过程:

    有仔细检查过整个流程,确认了不是后端问题。也有尝试跟踪过从后端到前端拦截器过程数据的变化,但很少有这方面的经验,也没找到问gpt给的三个情况的执行顺序:

1.浏览器控制台中网络模块检测到请求的返回值并展示。

2.前端定义的拦截器接收响应并打印到控制台。

3.请求方法接收到响应数据并打印完整响应对象。

之后想着把名字换换,我c,又有数据了,猜测是若依对roleIds字段做了些事。

后面排到了,发现这个

this.$set(this.form, "roleIds", response.roleIds);

在...\src\views\system\user\index.vue的修改方法里,把它注释掉之后即使名字还是roleIds,也能展示出数据

    /** 修改按钮操作 */
    handleUpdate(row) {
      console.log("row",row);
      
      this.reset();
      const userID = row.userID || this.ids;
      console.log("修改按钮操作userID",userID);
      
      // getUserProfile(userID).then(response => {
        GetUserUpdateInfo(userID).then(response => {
          console.log("完整响应对象:", response);

        this.form = response.data.data;
        // this.postOptions = response.posts;
        this.roleOptions = response.data.roles;
        // this.$set(this.form, "postIds", response.postIds);
        // this.$set(this.form, "roleIds", response.roleIds);
        ...

.....很神奇

this.$set()介绍:

this.$set() 是 Vue.js 提供的一个方法,用于向 Vue 实例的响应式对象中动态添加新属性。这在 Vue 的响应式系统中非常重要,因为 Vue 默认只会对已存在的属性进行观察,如果直接赋值新属性,Vue 无法自动检测到这个变化。

this.$set(target, propertyName, value);
  • target: 目标对象,通常是 Vue 组件的 data 中的对象。
  • propertyName: 要添加的属性名,可以是字符串或符号。
  • value: 要设置的值。

注意事项

  1. 响应式系统:

    • 使用 this.$set() 可以确保新添加的属性是响应式的。如果直接用 this.user.age = 25,Vue 不会检测到 age 的变化。
  2. 避免性能问题:

    • 过多地使用 this.$set() 会增加 Vue 实例的复杂性和性能开销,因此应尽量在需要时使用。
  3. 数组的响应式更新:

    • 对于数组,Vue 也提供了一些特定的方法来确保响应式更新,例如 this.$set(array, index, value) 可以用来替代 array[index] = value
  4. 兼容性:

    • this.$set() 是 Vue 2.x 的方法。在 Vue 3.x 中,由于其响应式系统的改进,使用 reactiveref 方式进行状态管理,不再需要使用 this.$set()
  5. 异步更新:

    • 在 Vue 中,数据的更新是异步的,因此在更新后立即访问新的属性时,可能需要使用 nextTick 来确保 DOM 已更新。

具体原因

还没搞清楚,应该和同步异步有关。具体的话等以后有时间了在看看吧。如果有大佬知道的也可以指点一下。

解决:

将this.$set();注释掉,直接赋值即可

    /** 修改按钮操作 */
    handleUpdate(row) {
      console.log("row",row);
      
      this.reset();
      const userID = row.userID || this.ids;
      console.log("修改按钮操作userID",userID);
      
      // getUserProfile(userID).then(response => {
        GetUserUpdateInfo(userID).then(response => {
          console.log("完整响应对象:", response);

        this.form = response.data.data;
        // this.postOptions = response.posts;
        this.roleOptions = response.data.roles;
        console.log("this.roleOptions",this.roleOptions);
        //这里直接赋值
        this.form.roleIds = response.data.roleIds
        // this.$set(this.form, "postIds", response.postIds);
        // this.$set(this.form, "roleIds", response.roleIds);


        this.open = true;
        this.title = "修改用户";
        this.form.password = "";
      });
    }

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

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

相关文章

centos-LAMP搭建与配置(论坛网站)

文章目录 LAMP简介搭建LAMP环境安装apache(httpd)安装mysql安装PHP安装php-mysql安装phpwind LAMP简介 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写:Linux操作系统,网页服务器Apache,…

【LangChain系列3】【检索模块详解】

目录 前言一、LangChain1-1、介绍1-2、LangChain抽象出来的核心模块1-3、特点1-4、langchain解决的一些行业痛点1-5、安装 二、检索模块详解2-1、文档加载器2-1-1、Demo示例2-1-2、JSON加载2-1-3、CSV加载 2-2、文档转换器2-2-1、按字符进行拆分2-2-2、按代码分割2-2-3、Markdo…

arm 体系架构-过程调用标准AAPCS

一、什么是AAPCS? 旧时,ARM 过程调用标准叫做 APCS (ARM Procedure Call Standard),Thumb的过程调用标准为 TPCS。如今这两种叫法已经废弃,统一称作 AAPCS (Procedure Call Standard for the ARM Architecture)。 AAPCS 是 ARM …

UE5之5.4 第三人称示例代码阅读

第三人称的代码相对第一人称少了很多,只有一个移动跳跃的能力 构造函数,添加角色的移动属性,限制了当controller移动角色不会乱转,然后创建了一个相机杆,创建了一个跟随相机,绑到相机杆上 然后在这个函数设…

用二分法查找有序容器的插入点

例子&#xff1a; int main() {vector<int> vec { 1,2,3,4,5,7,8,9 };auto n alg.find_binary_insert_pos(vec.begin(), vec.end(), 6);vec.insert(vec.begin() n, 6);_pn(vec);list<int> lst { 1,10,11,9,5 };for (auto& v : lst) {//添加不存在的元素au…

241024-Ragflow离线部署Docker-Rootless环境配置修改

A. 最终效果 B. 文件修改 docker-compose.yml include:- path: ./docker-compose-base.ymlenv_file: ./.envservices:ragflow:depends_on:mysql:condition: service_healthyes01:condition: service_healthyimage: ${RAGFLOW_IMAGE}container_name: ragflow-serverports:- ${…

D50【python 接口自动化学习】- python基础之类

day50 init方法 学习日期&#xff1a;20241027 学习目标&#xff1a;类 -- 64 init方法&#xff1a;如何为对象传递参数&#xff1f; 学习笔记&#xff1a; 魔术方法 init方法 class Klass(object):# 定义初始化方法&#xff0c;类实例化时自动进行初始化def __init__(self…

autMan框架的指令转换功能学习

以正则表达式为基础 一、基本用法【简单替换】 示例1&#xff1a; 匹配表达式&#xff1a;激活 结果表达式&#xff1a;咖啡码 效果&#xff1a;只要命令中包含“激活”这两个字&#xff0c;就会将命令中所有的“激活”替换为“咖啡码”&#xff0c;即你从后台看到收到的命令是…

leetcode-64-最小路径和

题解&#xff1a; 以题中矩阵为例&#xff1a; &#xff08;1&#xff09;走到grid[0][0]的最小距离就是起点grid[0][0]即dp[0][0]grid[0][0]; &#xff08;2&#xff09;走到grid[0][1]的最小距离&#xff1a;dp[0][1]grid[0][0]grid[0][1]; &#xff08;3&#xff09;走到…

《神经网络助力战场车辆及部件损毁识别与评估》

《神经网络助力战场车辆及部件损毁识别与评估》 一、战场车辆损毁评估的重要意义二、传统战场车辆损毁评估方法&#xff08;一&#xff09;视觉评估法&#xff08;二&#xff09;仪器检测技术 三、神经网络在战场车辆损毁评估中的应用案例&#xff08;一&#xff09;射击毁伤评…

WPF+MVVM案例实战(七)- 系统初始化界面字体描边效果实现

文章目录 1、案例效果展示2、项目准备3、功能实现1、资源获取2、界面代码3、后台代码 4 源代码获取 1、案例效果展示 2、项目准备 打开项目 Wpf_Examples&#xff0c;新建系统初始化界面 WelcomeWindow.xmal,如下所示&#xff1a; 3、功能实现 1、资源获取 案例中使用的CSD…

VMware Workstation Pro 17 安装 Centos 7.9 虚拟机

下面以使用VMware Workstation Pro 17.5.2版本进行安装&#xff0c;CentOS版本为7.9&#xff0c;7.x的原来很多地址失效了&#xff0c;因为旧版移到了vault目录。为了方便大家整理可用的下载地址&#xff1a;清华大学镜像站 新建虚拟机 下面是填写的虚拟机的名称和路径&#x…

拴柱说Mac之Mac的高效使用技巧第二期

Mac的触控板想必大家都会使用&#xff0c;比如三指拖移窗口&#xff0c;四指切换桌面&#xff0c;触控板能做到的其实更多&#xff0c;今天的高效使用技巧讲的就是触控板&#xff0c;如何才能让你的触控板更加的好用 第一步&#xff0c;官网下载BetterAndBetter 第二步&#…

部署前后端分离若依项目--CentOS7Docker版

一、准备 centos7虚拟机或服务器一台 若依前后端分离项目&#xff1a;可在下面拉取 RuoYi-Vue: &#x1f389; 基于SpringBoot&#xff0c;Spring Security&#xff0c;JWT&#xff0c;Vue & Element 的前后端分离权限管理系统&#xff0c;同时提供了 Vue3 的版本 二、环…

【Python爬虫】获取汽车之家车型配置附代码(2024.10)

参考大哥&#xff0c;感谢大哥&#xff1a;https://blog.csdn.net/weixin_43498642/article/details/136896338 【任务目标】 工作需要想更方便地下载汽车之家某车系配置清单&#xff1b;&#xff08;垃圾汽车之家不给下载导出表格&#xff0c;配置页叉掉了车系要出来还要重新…

软件测试知识点汇总

第一部分:(软件)测试概念类 1、软件质量 软件质量是“软件满足规定或潜在用户需求特性的总和”。 反映出如下3方面的问题: 1)软件需求是度量软件质量的基础。不符合需求的软件就不具备质量。 2)软件人员必须遵循软件过程规范,用工程化的方法来开发软件。 3)满足一…

利用ADPF性能提示优化Android应用体验

Android Dynamic Performance Framework(ADPF)是google推广的一套用于优化散热以及CPU性能的动态性能框架。本文主要介绍其中的performance hint的部分。 1、为何引入ADPF 我们都知道&#xff0c;在大多数设备上&#xff0c;Android 会动态调整CPU的频率和核心类型。如果work l…

简单的udp程序

文章目录 1. 预备知识1.1 源IP地址和目的IP地址1.2 端口号1.3 套接字初识1.4 tcp协议和udp协议简单认识1.5 网络字节序 2. udp程序2.1 创建套接字&#xff08;socket&#xff09;的系统调用2.2 bind()2.2.1 初始化一个sockaddr_in结构体2.2.2 inet_addr函数2.2.3 0.0.0.02.2.4 …

如何搭建AI智能化招聘平台?招聘系统源码与小程序开发技术方案探讨

本篇文章&#xff0c;小编将深入探讨如何搭建一个AI智能化招聘平台&#xff0c;分析其背后的招聘系统源码架构以及APP开发的技术方案。 一、AI智能化招聘平台的核心功能 在设计AI招聘平台时&#xff0c;必须考虑其核心功能&#xff0c;以确保平台具备高效的招聘能力和智能化的…

shodan4,挂黑网站查找,弱口令网站搜索

myip参数 shodan myip&#xff08;查看自己的出口IP,哪个地址链接的公网)挂黑网站查找 我们今天看一看找一下&#xff0c;有些已经被黑的网站好吧&#xff0c;就是利用shodan查看一下哪些网站已经被黑了。 shodan search -limit 10 -fields ip_str,port http.title:hacked b…