今天,学会这5个Vue高级实战技巧就够了!

前言

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

专注于为中小企业提供成都网站制作、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业三沙免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

技巧

自动注册组件

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

 
 
 
 
  1.  
  2.  
  3.  

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

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

目录结构如:

 
 
 
 
  1. -src 
  2. --components 
  3. ---component1.vue 
  4. ---globalRC.js 

globalRC.js:

 
 
 
 
  1. import Vue from 'vue' 
  2.  
  3. function changeStr (str){ 
  4.     return str.charAt(0).toUpperCase() + str.slice(1); 
  5.  
  6. const requireComponent = require.context('./',false,/\.vue$/); // './'操作对象为当前目录 
  7.  
  8. requireComponent.keys().forEach(element => { 
  9.     const config = requireComponent(element); 
  10.  
  11.     const componentName = changeStr( 
  12.         element.replace(/^\.\//,'').replace(/\.\w+$/,'') 
  13.     ) 
  14.      
  15.     Vue.component(componentName, config.default || config) 
  16. }); 

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

 
 
 
 
  1. import './components/globalRC.js' 

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

 
 
 
 
  1.  
  2.  
  3.  

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

自动注册路由

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

 
 
 
 
  1. import Vue from "vue"; 
  2. import VueRouter from "vue-router"; 
  3. // 引入组件 
  4. import home from "../views/home.vue"; 
  5. import about from "../views/about.vue"; 
  6.   
  7. // 要告诉 vue 使用 vueRouter 
  8. Vue.use(VueRouter); 
  9.   
  10. const routes = [ 
  11.     { 
  12.         path:"/", 
  13.         component: home 
  14.     }, 
  15.     { 
  16.         path: "/about", 
  17.         component: about 
  18.     } 
  19.   
  20. var router =  new VueRouter({ 
  21.     routes 
  22. }) 
  23.  
  24. export default router; 

我们可以这样优化一下。

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

目录结构如:

 
 
 
 
  1. -src 
  2. --router 
  3. ---index.js 
  4. ---login.module.js 
  5. ---routeModule.js 

routeModule.js:

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

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

 
 
 
 
  1. export default { 
  2.     path:'/login', 
  3.     name:'login', 
  4.     component:()=>import('../views/login.vue') 

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

 
 
 
 
  1. import Vue from "vue"; 
  2. import VueRouter from "vue-router"; 
  3. import routerList from './routeModule.js' 
  4.   
  5. Vue.use(VueRouter); 
  6.    
  7. var router =  new VueRouter({ 
  8.     routerList 
  9. }) 
  10.  
  11. export default router; 

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

权限自定义指令

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

 
 
 
 
  1. import Vue from 'vue' 
  2. import App from './App.vue' 
  3.  
  4. function checkArray(key){ 
  5.     let arr = [1,2,3,4]; // 自定义权限列表 
  6.     let index = arr.indexOf(key); 
  7.     if(index>-1){ 
  8.         return true 
  9.     }else{ 
  10.         return false 
  11.     } 
  12.  
  13. Vue.directive('auth-key',{ 
  14.   inserted(el,binding){ 
  15.     let displayKey = binding.value; 
  16.     if(displayKey){ 
  17.       let hasPermission = checkArray(displayKey); 
  18.       if(!hasPermission){ 
  19.         el.parentNode && el.parentNode.removeChild(el); 
  20.       } 
  21.       else{ 
  22.         throw new Error('需要key') 
  23.       } 
  24.     } 
  25.   } 
  26. }) 
  27.  
  28. new Vue({ 
  29.   render: h => h(App), 
  30. }).$mount('#app') 

在页面中使用。

 
 
 
 
  1. btn  

render渲染函数

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

 
 
 
 
  1.  

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

 
 
 
 
  1. Vue.component('anchored-heading', { 
  2.   render: function (createElement) { 
  3.     return createElement( 
  4.       'h' + this.level,   // 标签名称 
  5.       this.$slots.default // 子节点数组 
  6.     ) 
  7.   }, 
  8.   props: { 
  9.     level: { 
  10.       type: Number, 
  11.       required: true 
  12.     } 
  13.   } 
  14. }) 

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

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

 
 
 
 
  1. import Vue from 'vue'; 
  2. import { Button, Select } from 'element-ui'; 
  3. import App from './App.vue'; 
  4.  
  5. Vue.component(Button.name, Button); 
  6. Vue.component(Select.name, Select); 
  7. /* 或写为 
  8.  * Vue.use(Button) 
  9.  * Vue.use(Select) 
  10.  */ 
  11.  
  12. new Vue({ 
  13.   el: '#app', 
  14.   render: h => h(App) 
  15. }); 

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

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

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

 
 
 
 
  1. import Vue from 'vue' 
  2. import App from './App.vue'; 
  3.  
  4. import uIcompontents from "./uIcompontents.js"; 
  5. Vue.use(uIcompontents); 
  6.  
  7. new Vue({ 
  8.   el: '#app', 
  9.   render: h => h(App) 
  10. }); 

本文转载自微信公众号「前端历劫之路」,可以通过以下二维码关注。转载本文请联系前端历劫之路公众号。

本文标题:今天,学会这5个Vue高级实战技巧就够了!
本文网址:http://www.hantingmc.com/qtweb/news10/13110.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联