随着这几年前端技术的快速发展,Vue框架在国内普及率极高,人人都会用。那么,如何才能写得比别人优雅?比别人漂亮?

鉴于一线互联网大厂在前沿技术领域的持续研究和大规模投入,直接向他们取经,是最便捷也是最高效的学习方式。但对于在中小公司工作的程序员来说,平时忙碌于业务代码,很少有机会接触到大厂的优秀实践。

本文将介绍一些大厂Vue项目的最佳实践:

1

一劳永逸的组件注册

通常在组件使用前,需要引入后再注册,但如果高频组件多了,每次都这样做,不仅新增很多代码,效率还低!我们应该如何优化呢?

其实,我们可以借助一下webpack的require.context() 方法来创建自己的(模块)上下文,从而实现自动动态require组件。

我们先在components文件夹(这里面都是些高频组件)添加一个叫global.js的文件,在这个文件里使用require.context 动态将需要的高频组件统统打包进来,然后在main.js文件中引入global.js的文件。

//  global.js文件import Vue from 'vue'function changeStr (str) {  return str.charAt(0).toUpperCase() + str.slice(1)}const requireComponent = require.context('./', false, /\.vue$/)// 查找同级目录下以vue结尾的组件const install = () => {  requireComponent.keys().forEach(fileName => {    let config = requireComponent(fileName)    console.log(config) // ./child1.vue 然后用正则拿到child1    let componentName = changeStr(      fileName.replace(/^\.\//, '').replace(/\.\w+$/, '')    )    Vue.component(componentName, config.default || config)  })}export default {  install // 对外暴露install方法}

最后我们就可以随时随地在页面中使用这些高频组件,无需再手动一个个引入了。

2

高精度权限控制—自定义指令directive

我们通常给一个元素添加 v-if / v-show 来做权限管理,但如果判断条件繁琐且多个地方需要判断,这种方式的代码不仅不优雅而且冗余。

针对这种情况,我们可以通过全局自定义指令来处理:我们先在新建个 array.js 文件,用于存放与权限相关的全局函数;

// array.jsexport function checkArray (key) {  let arr = ['1', '2', '3', '4', 'demo']  let index = arr.indexOf(key)  if (index > -1) {    return true // 有权限  } else {    return false // 无权限  }}

然后在将 array 文件挂载到全局中:

// main.jsimport { checkArray } from "./common/array";Vue.directive("permission", {  inserted (el, binding) {    let permission = binding.value; // 获取到 v-permission的值    if (permission) {      let hasPermission = checkArray(permission);      if (!hasPermission) { // 没有权限 移除Dom元素        el.parentNode && el.parentNode.removeChild(el);      }    }  }});

最后我们在页面中就可以通过自定义指令 v-permission 来判断:

 
权限按钮1 // 会显示    权限按钮2  // 无显示    权限按钮3 // 会显示

以上是几个Vue大厂实战经验。大家有没有想过一个问题?随着前端面试要求越来越高,像Vue这样的框架已经是基本功,我们凭什么敢说比别人厉害呢?

  • 我们都会写组件,但是你知道怎么让组件能够成为高复用性的组件库型组件吗?
  • 我们都会项目打包上线,但是你知道如何编写配置文件能让打包速度最优化吗?
  • 我们都会写路由,但是你知道如何写才能保证多路由模块解耦,保证更方便增加新的路由模块吗?

说来说去,大家都知道前端的全方面学习需要完整的前端思路实践教学,这边准备了一份前端路径完整图供大家学习:

扫码领取前端工程师学习成长思维导图

遇到扫码频繁,请再次识别哦!

(别让您的犹豫阻碍您的进步)

当然,有这些还不够,因为目前是否积累优秀实战经验已经成为区分前端水平高低的评判标准,这边给大家推荐一个学习平台—网易云课堂,大家可以去学习下大厂的优秀实践。想进阶自己的Vue技能,学习更多的大厂实践技能的前端小伙伴可以去这里学习一下前端课程。

10.26—10.29前端直播课程

一、理论:《代码质量从何而来?设计模式概论》

1、代码质量指标

2、设计模式概论

3、建造型设计模式

二、实战:《设计模式实战案例,有效提高代码质量》

1、作业讲解

2、设计模式解耦模块

3、设计模式优化代码

三、思路:《针对请求改进速度,网易如何管理项目api层》

1、如何管理自己的项目api层

2、axios拦截思路

3、如何二次封装请求库

四、架构:《高薪实战,NodeJS实现RESTFul架构》

1、什么是RESTFul

2、原生NodeJS下实现RESTful

3、Nodejs框架实现RESTful架构

……

每周更新,请持续关注!

扫码领取0元前端进阶系列直播课

遇到扫码频繁,请再次识别哦!

(别让您的犹豫阻碍您的进步)

更有网易前端进阶资料包免费赠送!

往期直播干货回顾↓

vue 中indexof_大厂Vue最佳实践总结,提高竞争力!相关推荐

  1. 收藏 | 700页NLP算法在百度、阿里、腾讯等一线大厂的最佳实践!PDF限时领!

    NLP算法在百度.阿里.腾讯等一线大厂的最佳实践? NLP以及知识图谱在业界的进展? 下阶段我们的发展方向有哪些? 今天,2020 DataFunTalk 精选: <NLP算法在业界的应用实践合 ...

  2. Java 中处理 Exception 的最佳实践

    Java 中处理 Exception 的最佳实践 在Java中处理异常并不是一个简单的事情.不仅仅初学者很难理解,即使一些有经验的开发者也需要花费很多时间来思考如何处理异常,包括需要处理哪些异常,怎样 ...

  3. 在ASP.NET Web API中返回错误的最佳实践

    本文翻译自:Best practice to return errors in ASP.NET Web API I have concerns on the way that we returns e ...

  4. 最佳实践 | 如何提高落地页的转化率?这里有4个策略

    你的营销落地页转化率有多高? 落地页是潜在客户了解你的业务的第一个入口.这种第一印象会让你获得新客户或者错失机会. 没有完美的登陆页面,唯一途径是学习"最佳实践"并通过实验确定最适 ...

  5. vue svg sprite loader_Vue项最佳实践

    资源 Vue-CLI 3.0:https://cli.vuejs.org/zh/guide/webpack.html vue-element-admin:https://github.com/PanJ ...

  6. Vue开发总结 及 一些最佳实践 (已更新)

    基本开发环境 vue-cli3 创建的项目,vscode 作为代码编写工具 vscode插件推荐:vscode 插件配置 文章目录 项目目录结构介绍 UI 框架选择 main,js 处理 axios ...

  7. Spring Boot 生产中的 16 条最佳实践

    来源:www.e4developer.com/2018/08/06/ Spring Boot是最流行的用于开发微服务的Java框架.在本文中,我将与你分享自2016年以来我在专业开发中使用Spring ...

  8. db2 参数标识符使用无效_在Python应用程序中使用配置的最佳实践

    大多数计算机应用程序都可以使用配置来指定行为,无论是通过命令行标志.环境变量还是配置文件.作为一名软件开发人员,处理配置时会遇到一些挑战,例如解析不合法的输入.验证它以及在程序的任意位置访问它.以Py ...

  9. 大型开发项目中 git 工作流的最佳实践

    Gitflow Workflow 是一个 Git 工作流,有助于持续软件开发和实施 DevOps 实践. 它由文森特·德里森 (Vincent Driessen) 在 nvie 首次出版并广受欢迎. ...

最新文章

  1. EBS fnd_global.apps_initialize
  2. JAVA 文件读写大全
  3. 拖动物体的时候,防止鼠标按下的时候对象突然跳动一下
  4. 网络工程师必备知识:苹果MAC系统下使用USB转console线配置交换机的连接方法
  5. 18-ESP8266 SDK开发基础入门篇--TCP 服务器 RTOS版,串口透传,TCP客户端控制LED
  6. LeetCode算法入门- Valid Parentheses -day11
  7. python用一行代码画个迷宫_用 Python 制作一个迷宫游戏
  8. shell read
  9. 关于MFC中CSpinButtonCtrl控件
  10. 永中Office走向何方?
  11. 利用Druid Monitor做数据库连接异常排查
  12. matlab仿真integrator,弹球的仿真 - MATLAB Simulink - MathWorks 中国
  13. phython入门基础
  14. 【设计模式】装饰者与继承装饰者与代理间的小九九
  15. Tomcat: Error starting child 原因以及处理方法
  16. 手把手教你:CSS+JS 打造一个有个性的滚动条
  17. 设计师都应该收集的海报素材网站,感觉真香
  18. 1790: 九九八十一
  19. 多态综合案例——电脑的USB 接口
  20. SVLAN,CVLAN,PVLAN区别

热门文章

  1. Mac配置炫酷终端以及直接预览Markdown和各类代码
  2. Linux引导流程(第二版)
  3. 51信用卡 Android自动埋点实践
  4. PHP移除json数据最右侧的逗号!
  5. Eclipse过滤多余无用的Link文件和文件夹
  6. 原来国家的名字可以如此的浪漫~~!
  7. 利用接口做参数,写个计算器,能完成加减乘除运算。 (1)定义一个接口Compute含有一个方法int computer(int n, int m)。 (2)设计四个类分
  8. OJ1062: 最大公约数(C语言)
  9. 信息学奥赛一本通 1245:不重复地输出数 | OpenJudge NOI 1.11 08:不重复地输出数
  10. 信息学奥赛一本通(2068:【例2.6】鸡兔同笼)