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

本文主要是介绍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)

在这里插入图片描述

这篇关于Vue实战技巧 —— 企业开发实战中的常见疑难问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/990274

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

css渐变色背景|<gradient示例详解

《css渐变色背景|<gradient示例详解》CSS渐变是一种从一种颜色平滑过渡到另一种颜色的效果,可以作为元素的背景,它包括线性渐变、径向渐变和锥形渐变,本文介绍css渐变色背景|<gradien... 使用渐变色作为背景可以直接将渐China编程变色用作元素的背景,可以看做是一种特殊的背景图片。(是作为背