百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

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

bigegpt 2024-08-29 11:26 1 浏览

作者:maomin9761 来源: 前端历劫之路

前言

今天,我们来分享几个不可不知的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) }); 

相关推荐

得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践

一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...

warm-flow新春版:网关直连和流程图重构

本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...

扣子空间体验报告

在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...

spider-flow:开源的可视化方式定义爬虫方案

spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...

solon-flow 你好世界!

solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...

新一代开源爬虫平台:SpiderFlow

SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...

通过 SQL 训练机器学习模型的引擎

关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...

鼠须管输入法rime for Mac

鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...

Go语言 1.20 版本正式发布:新版详细介绍

Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...

iOS 10平台SpriteKit新特性之Tile Maps(上)

简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...

程序员简历例句—范例Java、Python、C++模板

个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...

Telerik UI for iOS Q3 2015正式发布

近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...

ios使用ijkplayer+nginx进行视频直播

上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...

IOS技术分享|iOS快速生成开发文档(一)

前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...

macOS下配置VS Code C++开发环境

本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...