在 Vue.js 中使用任意 JavaScript 第三方库

本文介绍了在Vue项目中引入第三方库的三种方法:使用全局变量、在组件中单独引用及通过扩展Vue原型链实现。重点推荐使用插件方式扩充Vue原型链,使组件能够便捷地访问第三方库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:使用全局变量

在浏览器运行js所有的变量都会变为window对象的属性,因此我们可以把第三方的类库,定义为window的属性,这样在任何位置都可以使用

window.lodash = require('lodash');

这样在每个组件中都可以直接使用lodash

export default {
  created() {
    console.log(lodash.isEmpty() ? 'Lodash everywhere!' : 'Uh oh..');
  }
}

这种方法有个很大的问题,在服务器环境下是没有window对象的,这种方法就无法使用了。

方法二:在组件中引用

每个组件中想要用某个类库的时候可以直接import

// MyComponent.vue 文件
import lodash from 'lodash';
export default {
  created() {
    console.log(lodash.isEmpty() ? 'Lodash is available here!' : 'Uh oh..');
  }
}

这种方式有个最大的问题是,当你有好多组件用到一个类库的时候,要import好多次,非常麻烦

方法三:扩充vue原型链

前面提的两种方法,都有问题,第一种显然局限性是天然的,无法克服。但是第二种有改进空间,既然可以载入组件,我们只要讲载入的组件放到一个,在所有组件中都可以访问的地方就可以了。哪里是这样的呢,答案显而易见Vue.prototype。原型链上的属性,每个实例化对象都可以访问,而且是共享的,节省内存。多好的事啊。
于是我们可以对代码进行改进

import lodash from 'lodash';
Object.definePrototype(Vue.prototype, '$lodash', { value: lodash });

或者

import lodash from 'lodash';
Vue.prototype.$lodash = lodash;

为什么要价格 vue使this. http这种形式访问扩展类库,比如典型的this.$store

再次进化

虽然上面的方式比较好了,但是太散了,我们需要更有效的组织代码,插件方式是个不错的选择。
我们可以发上面的代码改在成一个插件,比如我们建一个axios.js用来把axios库,扩充到vue原型链上

// axios.js
import axios from 'axios';
export default {
  //这里有个
  install: function(Vue, name = '$http') {
    Object.defineProperty(Vue.prototype, name, { value: axios });
  }
}

这样我们在main.js中使用这个插件就可以了

// main.js
import AxiosPlugin from './axios.js';
Vue.use(AxiosPlugin, '$axios');

//从现在开始所有组件都可以使用this.$axios了
new Vue({
  created() {
    console.log(this.$axios ? 'Axios works!' : 'Uh oh..');
  }
})

本文参考了https://vuejsdevelopers.com/2017/04/22/vue-js-libraries-plugins/?jsdojo_id=medium_lip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值