Vue.js插件开发
Vue.js插件是为应用添加全局功能的一种强大而且简单的方式。插件的用途很广泛,从全局组件,到为应用添加一些额外的功能、如路由(Vue Router),存储在应用程序里的不可变数据(Vuex)。
一般来说,Vue插件的开发是非常简单的。Vue插件仅仅是包含一个公开方法install
的对象、这个方法有两个参数:Vue 构造器和一个可选的选项对象。尽管,插件系统看起来十分简单,但其仍然可以产生相当大的作用。
你的第一个插件
为了打开vue插件开发的大门,下面我们将先实现一个最简单的插件。这个插件的功能是:当组件被挂载到DOM后,控制台输出Mounted!
。
// 这是你的插件对象。 它可以导出到任何地方使用。
const MyPlugin = {
// install方法是必需的
// 包含两个参数:Vue 构造器,一个可选的选项对象
install(Vue, options) {
// 使用minxin将功能注入所有组件
Vue.mixin({
// 添加到mixin中的任何内容将被注入到所有组件中。
//在这个例子中, mounted() 方法将在组件被挂载到DOM后调用
mounted() {
console.log('Mounted!');
}
});
}
};
export default MyPlugin;
现在,你的插件便可以使用了。你可以通过导入并用Vue.use
来显式调用你的插件:Vue.use(MyPlugin)
import Vue from 'vue'
import MyPlugin from './my-vue-plugin.js'
import App from './App.vue'
// 在这里显式调用插件
Vue.use(MyPlugin)
new Vue({
el: '#app',
render: h => h(App)
});
你可能会奇怪,为什么我不能直接在main.js
中调用Vue.mixin()
来实现这一点呢?其原因就是:我们向Vue添加全局功能,而没有直接修改应用逻辑。拆分模块这种做法总是极好的,你可以随时添加或移除一个单独的模块。同时,这也使得插件非常容易分发。
添加一些其他的功能
安装应用范围的组件和指令
如果你想把组件或指令打包为一个插件来进行分发,可以这样写:
import MyComponent from './components/MyComponent.vue';
import MyDirective from './directives/MyDirective.js';
const MyPlugin {
install(Vue, options) {
Vue.component(MyComponent.name, MyComponent)
Vue.directive(MyDirective.name, MyDirective)
}
};
export default MyPlugin;
修改Vue构造器
你可以在插件中以你期待的方式来修改Vue构造器(全局Vue对象)。下面的代码在Vue构造器中添加了一个属性myAddedProperty
和一个方法myAddedMethod
。
const MyPlugin {
install(Vue, options) {
Vue.myAddedProperty = 'Example Property'
Vue.myAddedMethod = function() {
return Vue.myAddedProperty
}
}
};
export default MyPlugin;
修改Vue实例
不需要任何注入机制便可以将属性或方法直接添加到组件实例,你可以这样来修改Vue构造器的prototype
:
const MyPlugin {
install(Vue, options) {
Vue.prototype.$myAddedProperty = 'Example Property'
Vue.prototype.$myAddedMethod = function() {
return Vue.myAddedProperty
}
}
};
export default MyPlugin;
这些属性将会被加到所有的组件和Vue实例中。
社区里公认的做法是:添加在Vue prototype里的任何属性都要以美元符
$
作为其前缀
添加组件的生命周期钩子或属性
如上文中“你的第一个插件”示例所示,你可以通过Mixin添加生命周期钩子对Vue组件进行修改。
const MyPlugin = {
install(Vue, options) {
Vue.mixin({
mounted() {
console.log('Mounted!');
}
});
}
};
export default MyPlugin;
Mixin是一个相当重要的话题,但不在本文的讨论范围之内。目前,可以肯定的是,Mixin是一种灵活的分布式复用 Vue 组件的方式,Mixin可以包含任意组件选项并可以混合进其他组件之中。
自动安装插件
对于那些没有在应用中使用模块化系统的用户,他们往往将通过<script>
标签引用你的插件,并期待插件无需调用Vue.use()
便会自动安装 。你可以在插件最后添加如下几行代码来实现自动安装:
// 如果Vue是全局对象自动安装插件
if (typeof window !== 'undefined' && window.Vue) {
window.Vue.use(MyPlugin)
}
发布你的插件
如果你已经写了一个插件,并准备将其分享到社区,下面是一些常用的帮助别人发现你的插件的方法,如果你还不熟悉这些流程的话。
向Awesome-Vue提交PR。很多人会来这里寻找插件。
(其他) Vue论坛,Vue Gitter Channel,或者在Twitter上@ #vuejs。
赶快去开发一些插件吧!
End
作者:Joshua Bemenderfer
原文地址:creating-custom-plugins
译者:jeneser
译者GitHub:https://github.com/jeneser
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
Vue.js插件开发的更多相关文章
- Vue.js 插件开发详解
前言 随着 Vue.js 越来越火,Vue.js 的相关插件也在不断的被贡献出来,数不胜数.比如官方推荐的 vue-router.vuex 等,都是非常优秀的插件.但是我们更多的人还只停留在使用的阶段 ...
- Vue.js 插件开发
Vue.js 的插件应当有一个公开方法 install .这个方法的第一个参数是 Vue 构造器 , 第二个参数是一个可选的选项对象: MyPlugin.install = function (Vue ...
- vue.js 初体验— Chrome 插件开发实录
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:陈纬杰 背景 对于经常和动画开发打交道的开发者对于Animate.css这个动画库不会陌生,它把一些常见 ...
- Vue.js 实战总结
最近在某个项目中用到了Vue.js,从上手做开发到项目发布,一步步踩了不少坑.本文试图总结过去一个多月使用Vue.js中的一些经验,也算是一点心得体会吧,拿出来与大家分享,欢迎多多交流. Vue.js ...
- Vue.js 和 MVVM 小细节
MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...
- Vue.js 2.0 和 React、Augular等其他框架的全方位对比
引言 这个页面无疑是最难编写的,但也是非常重要的.或许你遇到了一些问题并且先前用其他的框架解决了.来这里的目的是看看Vue是否有更好的解决方案.那么你就来对了. 客观来说,作为核心团队成员,显然我们会 ...
- 窥探Vue.js 2.0 - Virtual DOM到底是个什么鬼?
引言 你可能听说在Vue.js 2.0已经发布,并且在其中新添加如了一些新功能.其中一个功能就是"Virtual DOM". Virtual DOM是什么 在之前,React和Em ...
- vue.js学习笔记
有了孩子之后,元旦就哪也去不了了(孩子太小),刚好利用一些时间,来公司充充电补补课,学习学习新技术,在这里做一个整理和总结.(选择的东西,既然热爱就把他做好吧!). 下来进入咱们的学习环节: 一.从H ...
- 从Vue.js窥探前端行业
近年来前端开发趋势 1.旧浏览器逐渐淘汰,移动端需求增加: 旧浏览器主要指的是IE6-IE8,它是不支持ES5特性的:IE9+.chrome.sarafi.firefox对ES5是完全支持的,移动端大 ...
随机推荐
- ASP.NET Core 2.0 MVC 发布部署--------- ASP.NET Core 发布的具体操作
ASP.NET Core 发布的具体操作 下面使用C# 编写的ASP.NET Core Web项目示例说明发布的全过程. 1.创建项目 选择“文件” > “新建” > “项目”. 在“添加 ...
- Unity 软件使用事项
打开旧版工程 目前发现两种方式来触发升级程序: 1.Unity软件启动时选择旧版工程,触发更新 2.直接打开旧版工程的场景文件,触发更新 在使用中发现一种错误做法,不知道是不是共性问题,在此先记录 ...
- 构建最基础的Spring项目及所需要的jar包
1.Spring 框架由6个模块组成 上图是spring4的结构图,不同版本结构略有差异,但模块都是相同的. 2.Core Container 核心容器 容器是Spring的核心部分,Core Con ...
- python基础(5)---整型、字符串、列表、元组、字典内置方法和文件操作介绍
对于python而言,一切事物都是对象,对象是基于类创建的,对象继承了类的属性,方法等特性 1.int 首先,我们来查看下int包含了哪些函数 # python3.x dir(int) # ['__a ...
- 关于js函数 形参和局部变量名相同 的问题
原文:https://segmentfault.com/q/1010000007278354?_ea=1295176 问题: function f1(a) { console.log(a);// 10 ...
- SCTF 2014 pwn题目分析
因为最近要去做ctf比赛的这一块所以就针对性的分析一下近些年的各大比赛的PWN题目.主防项目目前先搁置起来了,等比赛打完再去搞吧. 这次分析的是去年的SCTF的赛题,是我的学长们出的题,个人感觉还是很 ...
- wondows下安装pytho&pip
1.在https://www.python.org/downloads/下载相应的python安装包, 解压安装,配置环境变量. 2.下载pip安装包:https://pypi.python.org/ ...
- Python--re模块的findall等用法
1)正则表达式含义 . # 点可代表一切字符 \ # 起转义作用 [...] # 指代方括号中的任意字符 \d # 指代数字0-9 \D # 指代非数字 \s # 指代一切空格,包括tab制表符.空格 ...
- GUC-4 CopyOnWriteArrayList/CopyOnWriteArraySet
/* * CopyOnWriteArrayList/CopyOnWriteArraySet : “写入并复制” * 注意:添加操作多时,效率低,因为每次添加时都会进行复制,开销非常的大.并发迭代操作多 ...
- [翻译]HLS实践
最近公司项目没事做,课余实践研究一下技术,算是积累,也可以用到项目里,从零开始记录 HLS:Http Live Streaming 官方文档 https://developer.apple.com/s ...