前言

今天,我们来分享几个不可不知的vue高级实战技巧。

技巧

自动注册组件

我们平时可能这样引入注册组件。每次都得需要在头部引入,然后注册,最后在模板上使用。

<template><div id="app"><HelloWorld msg="Welcome to Your Vue.js App"/></div>
</template><script>
import HelloWorld from './components/HelloWorld.vue'export default {name: 'App',components: {HelloWorld}
}
</script>

那么,有没有更加方便快捷的方法呢?我们不妨这样。

创建一个名为globalRC.js文件,假设我们这里与组件平级,即存放在组件文件夹中。

目录结构如:

-src
--components
---component1.vue
---globalRC.js

globalRC.js:

import Vue from 'vue'function changeStr (str){return str.charAt(0).toUpperCase() + str.slice(1);
}const requireComponent = require.context('./',false,/\.vue$/); // './'操作对象为当前目录requireComponent.keys().forEach(element => {const config = requireComponent(element);const componentName = changeStr(element.replace(/^\.\//,'').replace(/\.\w+$/,''))Vue.component(componentName, config.default || config)
});

然后,我们需要在main.js文件中引入。

import './components/globalRC.js'

最后,我们只需要在模板直接使用就可以了。

<template><div id="app"><Component1 /></div>
</template><script>
export default {name: 'App'
}
</script>

注意,require.context是webpack的一个API,所以,需要基于webpack环境才可以使用。

自动注册路由

这是我们之前注册路由的方式。如果路由文件多了,会显得特别臃肿。

import Vue from "vue";
import VueRouter from "vue-router";
// 引入组件
import home from "../views/home.vue";
import about from "../views/about.vue";// 要告诉 vue 使用 vueRouter
Vue.use(VueRouter);const routes = [{path:"/",component: home},{path: "/about",component: about}
]var router =  new VueRouter({routes
})export default router;

我们可以这样优化一下。

在路由文件夹下,这里假设是名为router文件夹下,创建一个routeModule.js文件。

目录结构如:

-src
--router
---index.js
---login.module.js
---routeModule.js

routeModule.js:

const routerList = [];function importAll(r){r.keys().forEach(element => {routerList.push(r(element).default);});
}importAll(require.context('./',true,/\.module\.js/));// 这里自定义为.module.js 结尾的文件
export default routerList

然后,我们只需要创建对应的路由文件,如:login.module.js

export default {path:'/login',name:'login',component:()=>import('../views/login.vue')
}

最后,在路由配置文件index.js中引入routeModule.js文件即可,


import Vue from "vue";
import VueRouter from "vue-router";
import routerList from './routeModule.js'Vue.use(VueRouter);var router =  new VueRouter({routerList
})export default router;

注意,require.context是webpack的一个API,所以,需要基于webpack环境才可以使用。

权限自定义指令

平常,我们可能会遇到按钮级别或者页面内操作权限的需求,我们可以写一个全局自定义指令。首先,可以在入口文件main.js文件中。

import Vue from 'vue'
import App from './App.vue'function checkArray(key){let arr = [1,2,3,4]; // 自定义权限列表let index = arr.indexOf(key);if(index>-1){return true}else{return false}
}Vue.directive('auth-key',{inserted(el,binding){let displayKey = binding.value;if(displayKey){let hasPermission = checkArray(displayKey);if(!hasPermission){el.parentNode && el.parentNode.removeChild(el);}else{throw new Error('需要key')}}}
})new Vue({render: h => h(App),
}).$mount('#app')

在页面中使用。

<button v-auth-key="8">btn</button>

render渲染函数

我们首先来看下这样一个例子,你会看到模板上特别多的条件判断。

<template><div><h1 v-if="level === 1"></h1><h2 v-else-if="level === 2"></h2><h3 v-else-if="level === 3"></h3><h4 v-else-if="level === 4"></h4></div>
</template>

怎么才能优化呢?接下来,我们可以使用render渲染函数。

Vue.component('anchored-heading', {render: function (createElement) {return createElement('h' + this.level,   // 标签名称this.$slots.default // 子节点数组)},props: {level: {type: Number,required: true}}
})

局部引入第三方UI框架优化

我们经常使用UI框架,如果我们使用按需加载的话,需要每次都要注册使用一下。就像下面这样:

import Vue from 'vue';
import { Button, Select } from 'element-ui';
import App from './App.vue';Vue.component(Button.name, Button);
Vue.component(Select.name, Select);
/* 或写为* Vue.use(Button)* Vue.use(Select)*/new Vue({el: '#app',render: h => h(App)
});

我们可以这样优化一下,创建一个uIcompontents.js文件。

// 每次只需要在这添加组件即可
import { Button, Select } from 'element-ui';const components = { Button, Select };function install(Vue){Object.keys(components).forEach(key => Vue.use(components[key]))
}export default { install }

然后,在main.js文件中引入。

import Vue from 'vue'
import App from './App.vue';import uIcompontents from "./uIcompontents.js";
Vue.use(uIcompontents);new Vue({el: '#app',render: h => h(App)
});

关于作者

作者:Vam的金豆之路。曾获得2019年CSDN年度博客之星,CSDN博客访问量已达到数百万。掘金博客文章多次推送到首页,总访问量已达到数十万。

另外,我的公众号:前端历劫之路,公众号持续更新最新前端技术及相关技术文章。欢迎关注我的公众号,让我们一起在前端道路上历劫吧!Go!

今天,学会这几个Vue高级实战技巧就够了!相关推荐

  1. git 修改tag 备注_【Git】第十二章:Git高级实战技巧

    1.查看不同版本之间的代码差异 短SHA-1值 使用git命令来代表某个commit时,我们不一定就是要用40位完整的SHA-1 hash值,也可以只是提供hash值的前几位就可以了,至少要4位以上, ...

  2. 7个实战技巧帮你提升前端技术水平!

    项目架构 // 1.封装项目的基础库 优秀的基础库可以保证项目的最低质量下限和更好的可扩展性.通常我们说的基础库包括-组件库.基础 css 库.基础工具库. // 2.层级管理 管理你的请求,建议把你 ...

  3. 58-Vue高级实战

    Vue高级实战 Vue-cli: 什么是Vue-cli: Vue cli是基于Vue的应用开发提供的一个标准的脚手架工具 为应用搭建基础的框架结构,提供插件.开发服务.Preset.构建打包功能 Vu ...

  4. vue 监听浏览器页面关闭_前方高能,这是最新的一波Vue实战技巧,不用则已,一用惊人...

    ❝ 葡萄美酒夜光杯,欲饮琵琶产品催.客户现场君莫笑,古来埋坑几人回? ❞ 最近一直在开发后台管理系统,日复一日的重复着表单表格表格表单,标准的CV仔,感觉好无聊,如何能在这种无聊的开发过程中去提升自己 ...

  5. 《Vue.js实战》第七章.组件

    7.1 组件作用: 提高代码复用性,使项目易于维护 7.1 组件的使用 7.1.1 组件注册-全局注册 全局注册后,任何vue的实例都可以使用该组件. Vue.component('my-compon ...

  6. Vue.js实战梁笔记02(第3-5章)

    1.计算属性 当表达式过程的时候,不如使用函数,如何使用函数呢,使用methods是一种,使用计算属性也是一种方式. 所有的计算属性都是以函数的形式卸载vue实例内的computed选项内,最终返回计 ...

  7. [Vue.js] 一篇超级长的笔记,给《Vue.js 实战》划个重点

    本文前言 本笔记建立在书籍<Vue.js实战 / 梁灏编著>的基础上,旨在帮助有 Vue.js 基础的朋友快速回忆 Vue.js 的细碎内容.初学者建议阅读<Vue.js实战> ...

  8. 《Vue.js实战》记录

    目录 初识Vue.js 指令 v-html v-pre v-bind v-on v-cloak v-once v-show v-for v-model 自定义指令 全局指令 局部指令 钩子函数 计算属 ...

  9. 08.vue.js实战笔记(计算属性、v-bind及class和style的绑定、内置指令、方法与事件)

    1.计算属性 所有的计算属性都以函数的形式写在vue实例的computed选项内,最终返回计算后的结果 <!DOCTYPE html> <html lang="en&quo ...

最新文章

  1. R语言保存图片为特定dpi值(分辨率)的图像
  2. IE5下通过、不会被列表框遮挡的日期控件
  3. IDEA+Maven运行调试MapReduce程序
  4. C语言实现动态数组dynamic array(附完整源码)
  5. 人工智能-机器学习之Selenium(chrome驱动,火狐驱动)
  6. 信息学奥赛一本通 1942:【08NOIP普及组】ISBN号码 | OpenJudge NOI 1.7 29:ISBN号码 | 洛谷 P1055 [NOIP2008 普及组] ISBN 号码
  7. 【Java】@transient代表着什么
  8. 今日写代码遇到的https请求的时候,提示ssl证书错误
  9. 史上首个人脸识别禁令出台,警察用来抓罪犯也不行!旧金山可真行
  10. dede flag标签用法
  11. java moka_山地车 佳沃 MOKA(摩卡) 24S A价格
  12. 2018厦门大学计算机考研分数,2018年厦门大学考研复试分数线【已公布】
  13. 【Linux c】sipc
  14. Redis Cluster集群原理+三主三从交叉复制实战+故障切换(十)
  15. 百度指数Cipher-text加密
  16. 【自省篇】软件开发七宗罪
  17. PCL法线计算及原理
  18. Python利用PyQt5制作一个获取网络实时数据NBA数据播报GUI
  19. android(4) 使用ViewPaper 以及这几年来的一些感悟
  20. 2020年3月31日 失眠问题解决之道 ~ 观想法②

热门文章

  1. NXP EMDA学习(1):TCD寄存器详解
  2. RBOHD丨呼吸爆发氧化酶同源蛋白D相关研究工具介绍
  3. 点击input框去掉阴影和边框
  4. 第三方支付平台支付接口及回调接口开发
  5. Spark - AUC、Accuracy、Precision、Recall、F1-Score 理论与实战
  6. BUG: scheduling while atomic: swapper/0/0/0x00010000
  7. 30元 信用卡还款金免费领
  8. Hadoop2 MR-JobHistory服务介绍
  9. 「镁客·请讲」小熊尼奥熊剑明:AR教育产品没有想象中那么容易,入坑需谨慎...
  10. 人群计数最新综述(2021)