本文主要给大家介绍的是关于在Vue框架中正确引入JS库的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍:
错误示范
全局变量法
最不靠谱的方式就是将导入的库挂在全部变量window 对象下:
// entry.js: window._ = require('lodash'); // MyComponent.vue: export default { created() { console.log(_.isEmpty() ? 'Lodash everywhere!' : 'Uh oh..'); } }
这种方式的缺点有很多,我们只说其中一个关键的点:不支持服务端渲染。当应用跑在服务端时,window对象不存在,当然试图去访问window下的属性会抛出错误。
处处引入法
另外一个不太优雅的方式就是在需要的每个文件中都引入对应的库:
// MyComponent.vue: import _ from 'lodash'; export default { created() { console.log(_.isEmpty() ? 'Lodash is available here!' : 'Uh oh..'); } }
虽然这方法是可行的,但是太不简洁。你必须在每个文件中都记得引入, 而且如果不需要了,又得重新删除。另外,如果打包策略不够明智的话,可能会打包出多份重复的代码。
正确引入方式
最简单靠谱的方式是用库变成Vue的原型对象的属性。下面,我来演示如何将Moment 库引入:
import moment from 'moment'; Object.definePrototype(Vue.prototype, '$moment', { value: moment });
Object.definePrototype 语法参见 MDN
由于所有的组件都会继承Vue原型对象上的方法,因此这些方法在任何组件文件中都能通过this.$moment 访问到:
// MyNewComponent.vue export default { created() { console.log('The time is ' . this.$moment().format("HH:mm")); } }
使用 Object.defineProperty 定义对象属性,如果不在属性描述器中额外说明,则该属性就是默认只读的,保护引入的库不被重新赋值。
写成插件
如果你在项目的很多地方都用了某个库,或者你希望全局可用,你可以构建自己的Vue 插件。
插件能化繁为简,能让你像下面这样很简单地引入自己想要的库:
import MyLibraryPlugin from 'my-library-plugin'; Vue.use(MyLibraryPlugin);
就像Vue Route,Vuex等插件一样,我们的库仅仅需要两行,就能在任何地方使用了。
如何写插件
首先,创建一个文件。本例中,我将引入一个Axios库的插件。我们就把这个文件命名为axios.js 吧。
最关键的地方在于,我们需要暴露一个将Vue构造器作为第一个参数的install 方法。
// axios.js: export default { install: function(Vue) { // Do stuff } }
然后我们可以用之前的方式将库添加到Vue的原型对象上:
// axios.js import axios from 'axios'; export default { install: function(Vue) { Object.defineProperty(Vue.prototype, '$http', { value: axios }); } }
接着我们只需要Vue实例的use方法就能将这个库引入整个项目了。我们像下面代码一样简单引入:
// entry.js import AxiosPlugin from './axios.js'; Vue.use(AxiosPlugin); new Vue({ created() { console.log(this.$http ? 'Axios works!' : 'Uh oh..'); } })
插件参数设置
插件的install方法还可以接受其他的可选参数。有些开发者可能不喜欢Axios实例对象的方法名$http,因为Vue resource插件的方法名也是这个。然后,让我们利用第二个参数来修改它。
// axios.js import axios from 'axios'; export default { install: function(Vue, name = '$http') { Object.defineProperty(Vue.prototype, name, { value: axios }); } }
// entry.js import AxiosPlugin from './axios.js'; Vue.use(AxiosPlugin, '$axios'); new Vue({ created() { console.log(this.$axios ? 'Axios works!' : 'Uh oh..'); } })
当然上面,我们可以直接在Object.defineProperty的中将name属性写死成$axios。也可以在install方法中引入多个需要的库。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持
为什么在Vscode还是不能正确引入vue 求大佬帮帮孩子
本文向大家介绍vue系列之requireJs中引入vue-router的方法,包括了vue系列之requireJs中引入vue-router的方法的使用技巧和注意事项,需要的朋友参考一下 requireJs简介 参数配置 requireJS 常用的方法与命令也就两个,因此requireJS使用起来非常简单。 require define 其中define是用于定义模块,而require是用于载入模
经常能看到网页中存在 <a href="javascript:void(0)">some link</a> 这样的写法却不明白什么意思,其实 StackOverflow 上已经有一个不错的解释了。 要了解这段代码的意思,首先需要知道 JavaScript 中 void 有什么用处。void 是一个很早就存在于 JS 中的操作符(而不是函数),通常的用法是 void(0)(相当于 void 0),返
问题内容: 我正在尝试绘制Play框架如何支持转义。 这是一个很好的页面,阐明了所需的功能:https : //www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet 因此,我尝试将其与Play模板功能相关联,并充分了解Play的功能和不功能。 HTML转义:或函数 属性转义:我找不到内置解决方案
本文向大家介绍Vue框架下引入ActiveX控件的问题解决,包括了Vue框架下引入ActiveX控件的问题解决的使用技巧和注意事项,需要的朋友参考一下 最近参与了山东某一公司的呼叫中心系统的开发项目,我负责的模块是在公司已有的前端Vue框架下集成他们的软电话条功能。从开始到结束所遇到的几个问题如下: 1.如何将ActiveX控件引入Vue,并且在页面上成功渲染; 2.如何调用ActiveX已提供的
本文向大家介绍jQuery的框架介绍,包括了jQuery的框架介绍的使用技巧和注意事项,需要的朋友参考一下 jQuery使用有一段时间了,但是有一些API的实现实在想不通。小编参考相关资料源码,现在把我的学习过程和收获分享给大家。 下面将使用简化的代码来介绍,主要关注jQuery的实现思想~>_<~ -------------------------- jQuery一开始使用匿名立即执行函数包裹其