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.hqwc.cn/news/702038.html

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

相关文章

Docker 使用 CentOS 镜像

使用 docker run 直接运行 CentOS 7 镜像&#xff0c;并登录 bash。 C:\Users\yhu>docker run -it centos:centos7 bash Unable to find image centos:centos7 locally centos7: Pulling from library/centos 2d473b07cdd5: Pull complete Digest: sha256:be65f488b7764ad36…

风电功率预测 | 基于GRU门控循环单元的风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测 | 基于GRU门控循环单元的风电功率预测(附matlab完整源码)完整代码风电功率预测 | 基于GRU门控循环单元的风电功率预测(附matlab完整源码) 完整代码 clc; clear close allX = xlsread(风电场预测.xlsx)

web学习记录--(5.14)

1.Sublime安装与汉化 直接点击windows即可下载&#xff0c;安装即可 Thank You - Sublime Text 汉化 Install Package ChineseLocalzation 2.PHPstorm下载以及激活,汉化 直接下载&#xff0c;然后找激活码激活即可 汉化 plugins&#xff08;插件&#xff09;/chinese&…

Kotlin协程实战指南:解锁Android开发高效能新时代

前言 在移动互联网的狂飙突进之中&#xff0c;Android开发领域如同站在风口的勇士&#xff0c;不断接受技术迭代与创新的双重洗礼。在这个快速变化的市场里&#xff0c;用户对应用性能和体验的期待水涨船高&#xff0c;开发者们面临的挑战也越来越大&#xff1a;如何在功能的丰…

【Redis7】10大数据类型之Bitfield类型

文章目录 1. Bitfield简介2. BITFIELD key [GET type offset]3. BITFIELD key [SET type offset value]4. BITFIELD key [INCRBY type offset increment] 1. Bitfield简介 Bitfield(位域)命令可以将一个 Redis 字符串看作是一个由二进制位组成的数组&#xff0c; 并对这个数组…

React 状态管理库深度对比:在做技术选型的时候如何选择合适的状态库,nolan出品

掘金链接&#xff1a;https://juejin.cn/post/7368288987642232872 1,简介 在状态共享这方面&#xff0c;不像 Vuex&#xff0c;React 的官方并没有强力推荐某种封装方案&#xff0c;所以 React 的状态管理工具五花八门&#xff0c;百花齐放&#xff0c; react-redux、dva、C…

全像宇宙投影第三部时间与空间(全文)下载

当这个人向空中凝视时&#xff0c;他所在的房间渐渐变得透明而朦胧&#xff0c;空中渐渐浮现一个久远前景像。突然他觉得自己在皇宫中庭内&#xff0c;他面前站著一位年轻女士非常美丽&#xff0c;有著橄榄色的皮肤。他可以见到她的颈项、手腕、脚踝上都挂著金饰&#xff0c;还…

基于HTTP GET方式获取网络时间的实现

上一节&#xff0c;我们介绍了基于NTP服务器获取网络时间的例子&#xff0c;但在有些情况下&#xff0c;比如我最近在使用RNDIS协议通过4G模块上网&#xff0c;这个协议不支持UDP协议&#xff0c;所以就用不了NTP服务器。或者有时候我们需要有更多的网络时间获取方式&#xff0…

Dart 3.4 发布:Wasm Native Macros(宏)

Google I/O 的结束&#xff0c;除了 Flutter 3.22 的发布 &#xff0c;Dart 3.4 也迎来了它是「史诗级」的更新&#xff0c;之所以这么说&#xff0c;就是因为 Wasm Native 的落地和 Macros 的实验性展示。 在此之前&#xff0c;其实我也提前整理过一些对应的内容&#xff0c;…

平安养老险深圳分公司携手福海街道开展5.12防灾减灾活动

在构建和谐社会、倡导人文关怀的当下&#xff0c;平安养老险深圳分公司以高度的社会责任感和深厚的人文情怀&#xff0c;持续关注老年人的健康与安全。在今年“5.12防灾减灾日”来临之际&#xff0c;公司积极响应倡议&#xff0c;于5月10日携手福海街道举办了一场别开生面的消防…

校园电话机对于校园信息化管理非常重要

任何一部校园电话机都有信息办理渠道&#xff0c;并且发挥着重要的效果&#xff0c;能够满意整个机器的更快速运作。然后使学生能够取得一个更好的运用条件&#xff0c;学生在运用产品的过程中&#xff0c;要经过正确的操作环节才能够发挥产品的优胜功能&#xff0c;然后到达一…

[Algorithm][回溯][组合][目标和][组合总和]详细讲解

目录 1.组合1.题目链接2.算法原理详解3.代码实现 2.目标和1.题目链接2.算法原理详解3.代码实现 3.组合总和1.题目链接2.算法原理详解3.代码实现 1.组合 1.题目链接 组合 2.算法原理详解 思路&#xff1a;每次都只选一个数&#xff0c;此后只能选它后面的数函数设计&#xff…