【vue2】近期bug收集与整理01

news2025/1/21 15:27:23

1d43f75f092a4050a8ce31e2d85f6868.gif

 🥳博       主:初映CY的前说(前端领域)

🌞个人信条:想要变成得到,中间还有做到!

🤘本文核心:记录博主在vue2中遇到过的坑,本文是博主的学习使用总结

目录

1登陆token的问题

2.组件没找到的原因

 3.父传子,子接收错误

4.tree组件的使用

5.nextTick处理组件缓存数据未清空的问题

6.给自定义组件绑定click点击事件失败

7.中英文键值的转换


1登陆token的问题

流程:收集检验-发请求-存入vuex-token本地化

通常我处理登录业务的时候流程是:给登录的那个按钮注册一个点击事件,点击的时候调用store中的actions触发请求,再调用mutations将我们的一个token进行本地化的存储。

思路是这样的没问题,可我们存的时候对于存token的位置,就需要注意下了。当我点击登录的时候需要将在发送的时候将token存入请求头中。

可有时候当我忘记写之后,查看network会提示我没有登录,为什么点击登录的时候没有登录呢?

(见下图)

 检查可知,我在发送请求的时候没有在请求拦截器中将token存入请求头中

写入请求重新发送请求查看:

 这个时候我们的登录业务就完成啦!


2.组件没找到的原因

我们组件使用的三步:导入、注册、引用。当我将这个组件导入时,下意识加上了{ } ,结果提示我组件导入失败。检查可知是我的注册的组件引入问题。当我把{ }删除之后就好了


 3.父传子,子接收错误

父传值给其他可以写三个参数type(类型),required(是否必须使用),default(默认值),下图为required写成了require


4.tree组件的使用

Tree组件 | Element

 这是官网的逻辑,下面的这个例子也是基于这个思想整合而成的。

逻辑:当pid与id相等的时候就把包含pid的这一项当作id这一项的子集

分析请求我们的一级数据与二级数据有什么特征,经分析得知:当pid与id相等的时候就把包含pid的这一项当作id这一项的子集。

  1. 传进来一个数组对象,定义一个空数组与对象来接收我们传递的值
  2. 遍历形参每一项遍历给每一项添加一个children空数组
  3. 将每一项的id拿出来作为我们对象的键,每一个item作为值
  4. 遍历我们的形参将有pid的项目收集(就是说它一定是某一项的子集)
  5. 根据pid与id关系,将有pid的项目将它加入我们的children中
  6. 如果没有pid则就是一级的
export function treeListData(list) {
// 1.定义列表与对象
  const treeList = []
  const obj = {}
  list.forEach(item => {
    if (!item.children) {
      item.children = []
    }
    obj[item.id] = item
  })
  console.log(obj, 'obj')// 遍历形参list每一项,将每一项的item.id中作为键,每一个item作为值

  // 循环
  list.forEach(item => {
  // 2.判断依据有pid就是父项,有就提取出来,并且把这一项添加到上级的children中
    const fatherItem = obj[item.pid]
    if (fatherItem) {
      fatherItem.children.push(item)
    } else {
      treeList.push(item)// 没有pid为最大的
    }
  })
  return treeList
}

5.nextTick处理组件缓存数据未清空的问题

拿页面中常见的弹窗来说,我们会封装一个dialog组件套起来我们form表单数据。当我正常收集/渲染数据关闭之后,第二次点开发现数据依旧是上次写/渲染的数据。解决办法:

  • 1.给数组绑定一个v-if属性,当我关闭时将弹窗改为false,这样做是可以,可频繁的创建组件/销毁组件会影响性能。
  • 2.给组件使用$nextTick,当我们获取到了数据再发送数据即可,这样就避免大量的新增销毁组件


6.给自定义组件绑定click点击事件失败

因为在自定义组件上注册的事件触发的是组件自定义的事件,需要加上.native修饰符


7.中英文键值的转换

在我们学习js的过程中,有的时候我们接收发送给后端的数据,需要我们提供一个对象,并且对象中的键与值都是中文,而我们这边只有键与值均为中文的对象数据与一份键的英文对应表。此时我们怎么将我们的中午的键值根据对应表转换成英文键,中文值呢?当然使用我们js中的方法啦!(Object.keys()、map()、foreach()等),好了,我们开始我的的案例讲解。
1.中文的键值对象

      arrList: [
        { 入职日期: 44505, 姓名: '老张', 工号: '9002', 手机号: '13800866258', 聘用形式: 2, 转正日期: 44821, 部门: '开发部' },
        { 入职日期: 44505, 姓名: '老王', 工号: '9008', 手机号: '13800866328', 聘用形式: 3, 转正日期: 44891, 部门: '人事部' },
        { 入职日期: 44505, 姓名: '老程', 工号: '9005', 手机号: '13800866952', 聘用形式: 1, 转正日期: 44892, 部门: '人事部' }]
    }

2.我们中英文键值对应表

 const mapInfo = {
        '入职日期': 'timeOfEntry',
        '手机号': 'mobile',
        '姓名': 'username',
        '转正日期': 'correctionTime',
        '工号': 'workNumber',
        '部门': 'departmentName',
        '聘用形式': 'formOfEmployment'
      }

思路:

  1.         找出所有的中文key
  2.         得到对应的英文key
  3.         拼接一个新对象: 英文key:每一项的中文值
 
    transExcel(results) {
      const mapInfo = {
        '入职日期': 'timeOfEntry',
        '手机号': 'mobile',
        '姓名': 'username',
        '转正日期': 'correctionTime',
        '工号': 'workNumber',
        '部门': 'departmentName',
        '聘用形式': 'formOfEmployment'
      }
      return results.map(item => {
        const enObj = {}// 存放英文键,中文值
        const zhKeys = Object.keys(item)// 得到的是每一项的键(中文)
        zhKeys.forEach(zhKey => {
          const enKey = mapInfo[zhKey]// 遍历mapInfo的键,得到英文的值
          if (enKey === 'timeOfEntry' || enKey === 'correctionTime') {
            enObj[enKey] = formatExcelDate(item[zhKey])
          } else {
            enObj[enKey] = item[zhKey]
          }
        })
        return enObj
      })
    },

 效果检查:


——期待大家的关注支持!你的肯定是我更新的最大动力——

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

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

相关文章

【学姐面试宝典】前端基础篇Ⅴ——JS深浅拷贝、箭头函数、事件监听等

前言 博主主页👉🏻蜡笔雏田学代码 专栏链接👉🏻【前端面试专栏】 今天继续学习前端面试题相关的知识! 感兴趣的小伙伴一起来看看吧~🤞 文章目录什么是事件监听事件委托以及冒泡原理介绍一下 promise&#x…

uniapp 小程序嵌套H5开发总结

项目需求是在uniapp小程序项目中嵌套H5页面,H5返回小程序需要传值给小程序进行通信。 好,百度一查确实可以实现 用的uniapp提供的web-view(https://uniapp.dcloud.io/component/web-view.html#web-view经验证实,做功能之前先看官网&#xff…

一天时间迅速准备前端面试|JavaScript——异步进阶

🌈本系列文章是博主精心整理的面试热点问题,吸收了大量的技术博客与面试文章,总结多年的面试经历,带你快速建立前端面试知识体系。抓住每一场面试的机会,知己知彼才能百战百胜! 上期回顾 JS基础–异步 本系…

【中秋快乐】如何用three.js实现我的太空遐想3D网页

目录 创作背景 功能分解 创建3d地球 创建3d月球 创建3d小火箭

解决element-ui动态加载级联选择器默认选中问题(Cascader)

前言 最近在开发任务中碰到需要在新增和修改时使用动态加载级联选择器,但是当在修改时设置默认选中项,出现了后端数据返回较慢,导致无法选中和级联框选中了但input框不显示的问题,网上找到的方法也不是很有效,还得使用…

Vue - v-for 循环渲染多个 “重复“ 子组件(仅 ref 不同,this.$refs.xx 使用时依然能准确找到子组件)将子组件 ref 设为动态,这样每个子组件都是 “独立“ 的!详细教程

前言 本教程更多版本:uni-app | 微信小程序 我们会通过给组件绑定 ref 值,然后通过 this.$refs.xx 来获取这个组件上的方法和变量。 如果 在 v-for 中循环渲染组件(绑定固定 ref),那么这个 ref 就会 “一摸一样”,导致根本无法找到(this.$refs.xx 谁?), 要解决这个问…

【前端】vue模板语法知识了解一下,是不是只知道用element-ui组件?

vue写在前面Vue模板语法文本原始HTML属性开源Vue模板和主题框架集合BootstrapVueelement-ui最后总结写在前面 上一篇总结了在实操过程中如果遇到了nodejs版本的问题,我们该如何去解决的,还有就是总结了vue2和vue3生命周期的区别,如果感兴趣的…

【JavaScript】JS实用案例分享:动态生成分页组件 | 通过按键实现移动控制

CSDN话题挑战赛第2期 参赛话题:学习笔记 🖥️ NodeJS专栏:Node.js从入门到精通 🖥️ 博主的前端之路(源创征文一等奖作品):前端之行,任重道远(来自大三学长的万字自述&am…

React 路由v6 - 超全详解

React router v6 路由 已经习惯了 v5 版本的路由 ,那么 v6 版本的路由 该怎么应用呢? 文章目录React router v6 路由Ⅰ、路由 v6 (两种形式)Ⅱ、 动态路由Ⅲ、路由重定向Ⅳ、路由跳转 (两种形式)Ⅴ、路由懒加载Ⅰ、路由 v6 (两种形式) 方案一 &#xff…

JS原生——编写简易计算器

一个非常适合新手练习的小案例!!! 使用JS的ES5语法HTMLCSS及企业级代码规范,方便后续良好的代码习惯养成!!! 先来看一下样式吧!!!(后附代码&…

组件通信的6种方式

什么是组件通信 vue组件中关系说明: 如上图所示, A与B、A与C、B与D、C与E组件之间是父子关系; B与C之间是兄弟关系;A与D、A与E之间是隔代关系; D与E是堂兄关系(非直系亲属) 针对以上关系我们归类为: 父…

前端跨域解决方案

文章目录1.同源政策2.跨域解决方案2.1 CORS普通跨域请求:只需服务端设置Access-Control-Allow-Origin即可携带cookie跨域请求:前后端都需设置2.2 JSONP原理缺点数据格式jsonp跨域实现2.3 postMessage跨域2.4 WebSocket属性:事件:使…

vue3+vite:本地代理,配置proxy

一、项目:uniappvue3vitets 二、配置文件在vite.config.ts proxy: {/snow: { // 匹配请求路径,localhost:3000/snowtarget: https://www.snow.com/, // 代理的目标地址changeOrigin: true, // 开发模式,默认的origin是真实的 origin:localh…

压缩gltf/glb模型踩坑与解决 three.js DRACOLoader

前言 使用前端three.js加载3d模型过程中,往往会出现模型大小过大导致前端加载时间过长,降低用户体验。 本文所记录的是笔者在使用gltf-pipeline压缩3d模型中踩坑DRACOLoader与解决的一个过程。 所采用的three库版本为 ^0.138.2 解决方案与介绍 通过g…

31.JavaScript数组进阶,一网打尽数组操作函数slice、filter、map、reduce、some、every、find、splice

文章目录数组进阶元素删除(对象方式)splice()删除一个元素删除多个元素截断数组元素替换元素插入返回值负索引slice()concat()forEach()indexOf、lastIndexOf、includesfind、findIndexfiltermapsortreversestr.split()和arr.join()reduce、reduceRightA…

vue在html标签 {{}} 中调用函数的方法

目录 一、问题 1)实现上述需求:有两种方式 2)两种实现方式对比: 二、解决方法(在html渲染时调用函数) 三、总结 注:不想仔细看的,可以直接看有颜色的及代码哟 一、问题 1.在ht…

关于 HbuilderX 运行项目到手机,搜索不到手机解决

注意 本文内,我的 HbuilderX 安装目录都是在 D:\app 目录下,所有关于本文的操作文件都是在 HbuilderX 安装包内。 第一步:打开环境变量,找到系统变量,然后点击编辑。 第二部:配置 HbuilderX 的 adbs 目录…

JS中的位运算

目录 JS中的位运算 JS中的与运算 JS中的或运算 JS中的否(非)运算 计算机中负数的存储方式 JS中的异或运算 JS中位运算的应用场景 位的叠加(开关) JS中的位移运算 左位移 右位移 全右位移 首先了解一下什么是位运算 位…

Vite 配置篇:日常开发掌握这些配置就够了!

不知道有没有这样的兄弟,学习 Vite 的时候,官网上各种配置看的是眼花缭乱。不知道哪些需要掌握,哪些只用简单了解一下。为了提高大家的效率,我把项目中常用的配置梳理了一下分享给大家,希望对你上手 Vite 有所帮助。话…

若依框架前端切换TagView时刷新问题

若依框架点击顶部tag切换时,永远都是刷新的。刷新问题两种情况:普通view切换时刷新及iFrame切换刷新 一、普通view切换时刷新 原因是view的name与在菜单填写的大小写不一致,按若依框架规则,路由地址必须写为 camel 驼峰命名形式&…