Vue实战技巧 —— 企业开发实战中的常见疑难问题

在这里插入图片描述

Vue企业开发实战中的常见疑难问题

    • 1. 解决Vue动态路由参数变化,页面数据不更新
    • 2. vue组件里定时器销毁问题
    • 3. vue实现按需加载组件的两种方式
    • 4. 组件之间,父子组件之间的通信方案
    • 5. Vue中获取当前父元素,子元素,兄弟元素
    • 6. 开发环境中代理的切换配置

1. 解决Vue动态路由参数变化,页面数据不更新

  • 问题描述:遇到动态路由,如:/page/:id 从/page/1 切换到 /page/2 发现页面组件没有更新。
  • 解决方式1:router-view 上增加一个不同:key值,这样vue就会识别这是不同的了。
<router-view :key="key"></router-view>
  ...
  computed:{
        key(){
            return this.$route.path + Math.random();
        }
    }
  • 解决方案2: 在组件内使用v2.2新增的beforeRouteUpdate
  • 在当前路由改变,但是该组件被复用时调用
beforeRouteUpdate (to, from, next) {
    // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
    // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 `this`
  },

2. vue组件里定时器销毁问题

  • 问题描述:在a页面写一个定时器,每秒钟打印一次,然后跳转到b页面,此时可以看到,定时器依然在执行。
  • 推荐的解决方式:通过$once这个事件侦听器器在定义完定时器之后的位置来清除定时器。
const timer = setInterval(() => {
    // 定时器操作
}, 1000)
// 通过$once来监听定时器,在beforeDestroy钩子可以被清除。
this.$once('hook:beforeDestroy', () => {
    clearInterval(timer);
})
  • 也可以使用生命周期声明的方式:
export default {
    beforeDestroy(){
        clearInterval(timer);
    }
}

3. vue实现按需加载组件的两种方式

  • 使用resolve => require([‘./ComponentA’], resolve),方法如下:
const ComponentA = resolve => require(['./ComponentA'], resolve)
  • 使用 () => import(), 具体代码如下:
const ComponentA = () => import('./ComponentA')

4. 组件之间,父子组件之间的通信方案

  • 常规的: props 与 $emit()。
  • 通过事件总线(bus),即通过发布订阅的方式。
  • vuex(多层次组件、多页面公用数据一般用这个)
  • 使用vue提供的 $parent / $children & $refs方法来通信。
  • provide/inject方案。
  • 深层次组件间的通信 $attrs, $listeners。

5. Vue中获取当前父元素,子元素,兄弟元素

<button @click = “fun($event)>点击</button>
  ...
  methods: {
   fun(e) {
	    // e.target 是你当前点击的元素
	    // e.currentTarget 是你绑定事件的元素
	    #获得点击元素的前一个元素
	    e.currentTarget.previousElementSibling.innerHTML
	    #获得点击元素的第一个子元素
	    e.currentTarget.firstElementChild
	    # 获得点击元素的下一个元素
	    e.currentTarget.nextElementSibling
	    # 获得点击元素中id为string的元素
	    e.currentTarget.getElementById("string")
	    # 获得点击元素的string属性
	    e.currentTarget.getAttributeNode('string')
	    # 获得点击元素的父级元素
	    e.currentTarget.parentElement
	    # 获得点击元素的前一个元素的第一个子元素的HTML值
	  	e.currentTarget.previousElementSibling.firstElementChild.innerHTML
    }
  }

6. 开发环境中代理的切换配置

  • 为了应对这样的跨域场景,在代码开发时,devServer要代理到本地后端。
  • 测试时,又要去修改代理到测试环境,上线后,调试新问题有可能代理到线上环境。
  • 该代码运行环境为Node.js,使用 process.env 可以获取到系统环境变量。
  • 从而区分当前机器是公司的生产机器,还是个人的开发机器。
  • 对vue.config.js的进行配置:
// 当前时间为了防止打包缓存不刷新,所以给每个js文件都加一个时间戳
const Timestamp = new Date().getTime();  
const proxyTargetMap = {
    prod: 'https://xxx.xxx.com/',
    dev: 'http://192.168.200.230:6379',
    test: 'http://test.xxx.com',
    local: 'http://localhost:8080/'
}
let proxyTarget = proxyTargetMap[process.env.API_TYPE] || proxyTargetMap.local
module.exports = {
    publicPath: process.env.NODE_ENV === 'production' ? '/' : '/',
    outputDir: 'dist',
    assetsDir: 'static',
    lintOnSave: false, // 是否开启eslint保存检测
    productionSourceMap: false, // 是否在构建生产包时生成sourcdeMap
    // 调整内部的 webpack 配置。
    // 查阅 https://github.com/vuejs/vue-docs-zh-cn/blob/master/vue-cli/webpack.md
    chainWebpack: () => { },
    //configureWebpack 这部分打包文件添加时间戳,防止缓存不更新
    configureWebpack: {
        output: { // 输出重构  打包编译后的 文件名称  【模块名称.版本号.时间戳】
            filename: `[name].${process.env.VUE_APP_Version}.${Timestamp}.js`,
            chunkFilename: `[name].${process.env.VUE_APP_Version}.${Timestamp}.js`
        },
    },

    devServer : {
        proxy: {
            '/api' : {
                target: proxyTarget,
                changeOrigin: true,
                pathRewrite: {
                    '^/api' : ''
                }
            }
        }
    }
};
  • 对应的 package.json 配置为,看下面的 cross-env API_TYPE=dev。
  • cross-env 是一个全局命令行工具,可以根据不同的平台更改当前的环境变量,从而实现了可以在开发者的机器上,选择性的调用开发模式或者生产模式
"scripts": {
  "serve": "vue-cli-service serve --mode development",
+  "serve:dev": "cross-env API_TYPE=dev vue-cli-service serve --mode development",
+  "serve:test": "cross-env API_TYPE=test vue-cli-service serve --mode development",
  "build": "vue-cli-service build --mode production",
  "test": "vue-cli-service build --mode test",
  },
  • 各环境的打包也可以如上配置。

1. 希望本文能对大家有所帮助,如有错误,敬请指出
2. 原创不易,还请各位客官动动发财的小手支持一波(关注、评论、点赞、收藏)
3. 拜谢各位!后续将继续奉献优质好文
4. 如果存在疑问,可以私信我(文底有V)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM 双亲委派机制详解

文章目录 1. 双亲委派机制2. 证明3. 优势与劣势 1. 双亲委派机制 类加载器用来把类加载到 Java 虚拟机中。从JDK1.2版本开始&#xff0c;类的加载过程采用双亲委派机制&#xff0c;这种机制能更好地保证 Java 平台的安全。 1.定义 如果一个类加载器在接到加载类的请求时&…

最新极空间部署iCloudpd教程,实现自动同步iCloud照片到NAS硬盘

【iPhone福利】最新极空间部署iCloudpd教程&#xff0c;实现自动同步iCloud照片到NAS硬盘 哈喽小伙伴们好&#xff0c;我是Stark-C~ 我记得我前年的时候发过一篇群晖使用Docker部署iCloudpd容器来实现自动同步iCloud照片的教程&#xff0c;当时热度还很高&#xff0c;可见大家…

MySQL旧表做分区流程

1. 为什么做分区 数据库分区是将数据库中的数据划分成独立的部分&#xff0c;每个部分称为一个分区。分区可以根据特定的标准&#xff0c;如范围、列表或哈希值&#xff0c;将数据分隔到不同的物理存储位置中。数据库表分区可以在多种情况下提供显著的好处。以下是一些应该考虑…

如何对基本公共服务均等化进行统计监测

党的十九大指出“履行好政府再分配调节职能&#xff0c;加快推进基本公共服务均等化&#xff0c;缩小收入分配差距”&#xff0c;提出到2035年基本公共服务均等化基本实现。国务院相继于2012年和2017年发布了《国家基本公共服务体系“十二五”规划》和《“十三五”推进基本公共…

Windows里使用ollama本地大模型部署

下载 ollama官网进行下载 下载完后下一步下一步即可 安装完成后验证是否成功&#xff0c;打开命令行输入ollama&#xff0c;有该指令即安装成功 环境变量配置 配置模型下载位置 看自己电脑硬盘情况配置 打开所有ip接口访问权限 如果想要远程调用ollama接口&#xff0c;…

Output directory is not specified

场景&#xff1a;从GitHub拉取Java项目使用IDEA打开运行的时候抛出 java: 写入com.common.exception.ChatException时出错: Output directory is not specified网上大部分是说在项目结构增加编译器输出路径&#xff0c;但我在实际开发的项目的时候这里为空&#xff0c;包括我加…

测试用例设计方法:招式组合,因果判定出世

1 引言 上篇讲了等价类划分和边界值分析法&#xff0c;而这两种方法只考虑了单个的输入条件&#xff0c;并未考虑输入条件的各种组合、输入条件之间的相互制约关系的场景。基于此短板&#xff0c;因果图法和判定表法应运而生。 2 因果图法 2.1 概念及原理 2.1.1 定义 一种…

分布式光伏监控系统功能模块详解

目前&#xff0c;分布式光伏发电系统的总容量比较小&#xff0c;并且光伏电站的功率受外界环境影响容易出现大起大落的现象。这使电压调整变得很困难。光伏电站运行维护人员不足&#xff0c;长时间不保养维护会影响光伏电站的发电效率。针对上述问题&#xff0c;鹧鸪云基于无线…

汇聚荣科技:拼多多开店没有流量应该怎么办?

拼多多开店没有流量是一个常见的问题&#xff0c;许多新手商家都会遇到这样的困境。那么&#xff0c;如何解决这个问题呢?下面从四个方面进行详细阐述。 一、优化店铺和商品 首先&#xff0c;要确保店铺和商品的质量。店铺要有自己独特的风格和特色&#xff0c;商品要有高质量…

Airtest核心API汇总

2024.2.25更新&#xff1a;新增剪切板、Airtest1.3.3touch/swipe支持绝对坐标和相对坐标 2023.9.3更新&#xff1a;Airtest1.2.7新增14个断言、断开连接API&#xff1b;Airtest1.2.10.2新增录屏API&#xff1b; 以下基于airtest1.2.0(截止2021.7.12&#xff0c;最新版本) https…

如何将公众号添加到CSDN个人主页

1. 创作中心- 推广管理 输入个人公众号名字并开启微信公众号推广 2. 将公众号的二维码图片加入拓展信息 个人主页的左下角就能看到推广 如果希望能看到是二维码 操作如下&#xff1a; 写篇文章贴上二维码 然后点击鼠标右键获得此页面链接 &#xff0c;例如我的个人公众号 htt…

洗地机哪款好用?希亦、追觅、顺造、米家等高品质洗地机推荐

家用洗地机已经成为家庭清洁的重要利器&#xff0c;其多功能性能帮助您轻松应对各种清洁任务&#xff0c;从而保持家居环境的清洁整洁。然而&#xff0c;市场上品牌繁多、功能各异的洗地机让人眼花缭乱。为了帮助大家做出明智的选择&#xff0c;我们将在本文中提供全面的选购指…

力扣98.验证二叉搜索树

法一&#xff08;自己思路&#xff0c;复杂了&#xff09;&#xff1a; from collections import dequeclass Solution(object):def isValidBST(self, root):""":type root: TreeNode:rtype: bool"""queue deque()if root.left!None:queue.app…

凸优化理论学习三|凸优化问题(一)

系列文章目录 凸优化理论学习一|最优化及凸集的基本概念 凸优化理论学习二|凸函数及其相关概念 文章目录 系列文章目录一、优化问题&#xff08;一&#xff09;标准形式的优化问题&#xff08;二&#xff09;可行点和最优点&#xff08;三&#xff09;局部最优点&#xff08;四…

地平线X3开发板Intel Realsense深度相机调试记录

1. 预编译包 编译这个SDK花费了5.6个小时&#xff0c;为了方便各位后续使用&#xff0c; 各位可以直接下载编译好的文件&#xff0c;包含C和Python的库&#xff0c;相关文件已经上传至百度云&#xff08;提取码&#xff1a;awe4 &#xff09;。 在提供的这些文件中&#xf…

思科模拟器学习1--Vlan Trunk

实验说明&#xff1a;将三台电脑的vlan 加到一台交换机里面&#xff0c;为了验证什么是虚拟局域网&#xff0c;把一个设备隔成三个空间&#xff0c;三个电脑互相不能通讯&#xff1b;目的是&#xff1a;vlan 1的通讯不可以向vlan 2传送&#xff0c;就是消息传送互不干扰的&…

独家揭秘:亲历清华大学答辩现场,惊喜万分 名校答辩不简单

会议之眼 快讯 五月&#xff0c;对于学术界来说&#xff0c;迎来了答辩的高潮&#xff01;是收获的季节&#xff01;今天&#xff0c;趁着阳光明媚&#xff0c;小编怀揣着对学术探索的无限热情和好奇心&#xff0c;决定亲自踏入中国顶尖学术殿堂——清华大学深圳国际研究生院&…

【核弹】我的第一款IDEA插件

SuperHotSwap 插件名称叫做&#xff1a;SuperHotSwap&#xff08;超级热更新&#xff09; 开发初心&#xff1a;旨在做出一款最便捷的IDEA热更新插件&#xff0c;减少用户操作步骤&#xff0c;提供零配置的可视化操作更新。 为什么要写这个插件&#xff1a; 每次改一下Mappe…

Linux内核发送网络数据

前言 我们开始今天对 Linux 内核⽹络发送过程的深度剖析。还是按照我们之前的传统&#xff0c;先从⼀段代码作为切⼊。 上述代码中&#xff0c;调⽤ send 之后内核是怎么样把数据包发送出去的。本⽂基于Linux 3.10&#xff0c;⽹卡驱动采⽤Intel的igb举例。 基础框架 我们看…

08 必会框架 - Spring全家桶

本课时主要介绍 Java 中常用的应用框架&#xff0c;重点讲解如下三部分内容。 Spring 框架中的主要知识点&#xff1b; NIO 框架 Netty 以及基于 Netty 实现的主流 RPC 框架 Motan、Dubbo 和 gRPC&#xff1b; ORM 框架 MyBatis。 常用框架汇总 先来看常用框架的知识点汇总…