非常实用的5个Vue高级实战技巧

更新日期: 2021-11-15阅读量: 62标签: 技巧

自动注册组件

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

<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)
});
站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: https://www.fly63.com/article/detial/10801

提高 Js性能的 12 个技巧

在创建 Web 应用程序时应始终考虑性能。为了帮助你开始,本文列举了有效提高应用程序性能的 12 种方法。性能是创建网页或应用程序时最重要的一个方面。没有人想要应用程序崩溃或者网页无法加载,或者用户的等待时间很长

JavaScript常用编码小技巧

这篇文章适合任何一位基于JavaScript开发的开发者。我写这篇文章主要涉及JavaScript中一些简写的代码,帮助大家更好理解一些JavaScript的基础。希望这些代码能从不同的角度帮助你更好的理解JavaScript。

Vue 项目中的常用技巧

在 Vue 项目开发中,很容易产生一些问题,比如代码重复、繁杂等,其实 Vue 项目开发中有很多技巧可以使用,本文将列出一些简单且很好用的几个技巧,帮助我们写出漂亮的代码

React 开发必须知道的 34 个技巧

React 是前端三大框架之一,在面试和开发中也是一项技能;本文从实际开发中总结了 React 开发的一些技巧技巧,适合 React 初学或者有一定项目经验的同学;万字长文,建议收藏。

更快学习 JavaScript 的 6 个思维技巧

我们在学习JavaScript,或其他任何编码技能的时候,往往是因为这些拦路虎而裹足不前:有些概念可能会造成混淆,尤其当你是从其他语言转过来的时候。找不到时间(有时是动力)学习

10 个很实用的 JavaScript 技巧

编程语言通常暗藏着各种技巧,熟练使用这些技巧可以提高开发效率。JavaScript 就是一门技巧性很强的语言,掌握常见的语法技巧不但可以加深对语言特性的理解,还可以简化代码,提高编码效率。本文分享 10 个常用的技巧,希望能成为你的开发工具箱的一部分

值得收藏的有用Js技巧

像其它语言一样,JavaScript中也可以通过一些技巧来完成一些复杂的操作. 接下来我们学习吧:数组去重;数组和布尔;创建一个空对象;合并对象;函数参数必须

13 个 npm 快速开发技巧

每天,数以百万计的开发人员使用 npm 或 yarn 来构建项目。运行npm init或npx create- response -app等命令几乎构建JS项目的首选方式,无论是为客户端或服务器端,还是桌面应用程序

我喜欢的5个编程技巧

在这篇文章中,我介绍了一些编程时尝试使用的模式。这些模式是多年来我自己在工作中实践的结果,也有是从同事那里偷偷学到的。这些模式没有特定的顺序,只是一个简单的集合。

CSS-in-JS 库 styled-class

为什么要在JavaScript里写CSS?避免命名全局污染,条件和动态样式(比如选择主题色之类的),在框架层面进行限制或补充(比如补全供应商前缀),避免业务人员使用奇技淫巧

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!