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.mdchainWebpack: () => { },//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.mzph.cn/pingmian/12292.shtml

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

相关文章

安卓手机APP开发__支持不同的语言和文化

安卓手机APP开发__支持不同的语言和文化 目录 概述 创建本地的目录和资源文件 在你的app中使用资源 结构化消息中的文本 概述 APP包括了能被指定为一种特定的文件的资源。例如&#xff0c;一个APP能够包括 特定的文件的字符串&#xff0c;这个字符串能被翻译为本地的语言…

pg数据库的热备

Pg数据库主从复制 ​ 前言&#xff1a;公司的一台服务器因为断电导致系统损坏&#xff0c;经过3天的抢修&#xff0c;将服务器和数据恢复。为了避免数据的丢失&#xff0c;先将数据备份&#xff0c;并进行高可用。 ​ 采用技术&#xff1a;keepalivedpg ​ 后期并实现zabbix…

传说中的运维门户设计

在IT服务管理这片广阔天地中&#xff0c;运维门户如同一位技艺高超的魔术师&#xff0c;轻轻一挥手&#xff0c;便将纷繁复杂的运维世界化繁为简&#xff0c;编织成一张便捷高效、触手可及的网络。它不仅是ITSM系统中不可或缺的一环&#xff0c;更是连接用户与技术世界的桥梁&a…

Spring WebFlux:响应式编程

在软件开发领域&#xff0c;随着互联网应用的规模和复杂性不断增加&#xff0c;传统的编程模型逐渐暴露出一些局限性&#xff0c;尤其是在面对高并发、大规模数据流处理等场景时。为了应对这些挑战&#xff0c;响应式编程&#xff08;Reactive Programming&#xff09;应运而生…

Java字符串去除空格的方法

前言 在Java编程实践中&#xff0c;处理字符串中的空格是一项基本且频繁的操作。本文将深入探讨如何使用Java原生方法以及Apache Commons Lang库中的StringUtils类&#xff0c;全方位解决字符串去空格的需求&#xff0c;让你的代码更加健壮和高效。 1. Java原生方法 a. trim…

电商核心技术揭秘56:客户关系管理与忠诚度提升

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘相关系列文章合集&#xff08;3&#xff09; 文章目录 引言客户关系管理&#xff08;CRM&#xff09;的重要性提升顾客体验数据驱…

AWS之云种类与云服务模式

云种类分为3种&#xff1a; 公有云&#xff1a;任何个人或者企业都可以通过注册的方式直接使用的云。&#xff08;特点&#xff1a;使用简单&#xff1b;通过web界面快速购买。缺点&#xff1a;安全性低&#xff1b;使用资源是与其他用户共享。&#xff09; 私有云&#xff1…

Intel HDSLB 高性能四层负载均衡器 — 快速入门和应用场景

目录 文章目录 目录前言与背景传统 LB 技术的局限性HDSLB 的特点和优势HDSLB 的性能参数基准性能数据对标竞品 HDSLB 的应用场景HDSLB 的发展前景参考文档 前言与背景 在云计算、SDN、NFV 高速发展并普遍落地的今天&#xff0c;随着上云业务的用户数量越来越多、数据中心的规模…

umi项目配置之项目构建时配置umirc.ts

对于 umi 中能使用的自定义配置&#xff0c;你可以使用项目根目录的 .umirc.ts 文件或者 config/config.ts&#xff0c;值得注意的是这两个文件功能一致&#xff0c;仅仅是存在目录不同&#xff0c;2 选 1 &#xff0c;.umirc.ts 文件优先级较高 umi 的配置文件是一个正常的 n…

【vivado】 IBERT GT收发器误码率测试

一、前言 IBERT(Integrated Bit Error Ratio Tester),集成误码率测试仪。作为用户来说可以使用这个工具对自己设计的板子中的高速串行收发器进行简单测试&#xff0c;从而判断设计的接口是否有问题。因为这个工具是直接集成到FPGA上&#xff0c;这样一来直接使用这个工具来测试…

ubuntu下安装wireshark

1、安装wireshark 打开终端&#xff0c;输入安装命令 sudo apt-get install wireshark 2、启动 输入命令回车&#xff0c;一定要加上sudo sudo wireshark 3、看到有很多UDP、ARP、ICMP协议等的网络报文 4、以太网口抓取到的报文&#xff0c;列表属性分别为&#xff1a; 编号| 时…

STL----push,insert,empalce

push_back和emplace_back的区别 #include <iostream> #include <vector>using namespace std; class testDemo { public:testDemo(int n) :num(n) {cout << "构造函数" << endl;}testDemo(const testDemo& other) :num(other.num) {cou…

数据分析——对比思维、A/B test

对比分析 数据大小 &#xff1a;与中值、平均值、目标值、标准做对比数据波动&#xff1a;变异系数、方差、标准差数据趋势&#xff1a;时间维度和空间维度 其中 时间维度 横向比较&#xff08;连续7天每天的销售量&#xff09; 纵向比较&#xff08;同一时期不同品类对比&…

iframe父级元素高度百分比不生效

<iframe :src"iframeUrl" width"100%" height"100%" frameborder"0" /> 1、使用绝对定位&#xff1a;将 iframe 的父级元素设置为相对定位&#xff0c;并将 iframe 设置为绝对定位。这样&#xff0c;iframe 就可以根据父级元素…

实验十 智能手机互联网程序设计(微信程序方向)实验报告

实验目的和要求 完成以下页面设计。 二、实验步骤与结果&#xff08;给出对应的代码或运行结果截图&#xff09; Wxml <view class"container"> <view class"header"> <view class"logo"…

景源畅信:抖音小店比较冷门的品类分享?

在抖音小店的世界里&#xff0c;热门品类总是吸引着众多商家和消费者的目光。然而&#xff0c;就像星空中的繁星&#xff0c;虽不那么耀眼却依然存在的冷门品类同样值得我们关注。它们或许不似服装、美妆那样日进斗金&#xff0c;但正是这些小众市场的存在&#xff0c;为平台带…

Java面试之SpringCloud篇

Nacos有什么用&#xff1f; ①服务注册与发现 ②配置管理 Es为什么查询效率快&#xff1f; &#xff08;1&#xff09;首先&#xff0c;ES使用了倒排索引这种数据结构来快速查找文档。倒排索引是一种针对文本搜索而优化的数据结构&#xff0c;它将每个词与出现这个词的文档列…

Linux 服务器配置共享文件夹(NFS)

一、准备三台 linux 服务器 三台服务器: manger:172.16.11.178 ap1:172.16.11.179 ap2:172.16.11.180 /root/serverfiles/ 为共享目录 二、配置步骤 1、在服务端01的机器上安装nfs和rpcbind程序 yum -y install nfs* yum -y install rpcbind* 2、在安装完nfs以及rpcb…

基于IDEA快速创建一个SpringMVC项目并且配置Tomcat

1&#xff0c;打开IDEA&#xff0c;新建Maven项目【使用web模板创建】 使用社区版的同学创建普通的maven项目&#xff0c;并配置项目的webapp&#xff0c;详情可参考 快速创建一个SpringMVC项目&#xff08;IDEA&#xff09; 2&#xff0c;在main目录下创建Java和resource目录…

2024洗地机爆款榜单,哪个牌子洗地机值得买?助你轻松选对洗地机

随着现代生活节奏的加快&#xff0c;人们对于家庭清洁的需求也越来越高。家用洗地机作为一种高效清洁工具&#xff0c;能够帮助您轻松应对家庭地板的清洁问题&#xff0c;节省时间和精力。然而&#xff0c;在选择洗地机时&#xff0c;究竟哪个牌子的洗地机值得买呢&#xff1f;…