Vue 自定义动态组件实例详解


Posted in Javascript onMarch 28, 2018

现在基于vue的UI组件库有很多,比如iview,element-ui等。但有时候这些组件库满足不了我们的开发需求,这时候我们就需要自己写一个插件。

举第一个栗子

用vue-cli搭建好项目目录之后,在src/components下面新建一个文件夹放我们要写的插件,如图所示:

Vue 自定义动态组件实例详解

index.vue里写我们的组件,代码如下:

Vue 自定义动态组件实例详解

index.js里面写index.vue的install方法,并用Vue.component注册组件,代码如下:

Vue 自定义动态组件实例详解

接下来我们要在默认的main.js里将刚刚写的index.js文件导入,并通过Vue.use来使用它,代码如下:

Vue 自定义动态组件实例详解

大功告成,接下来在app.vue里直接使用就可以啦,可以看到页面已经显示相应的组件了,如图:

Vue 自定义动态组件实例详解

这时候我们还可以自定义click事件,并通过参数的方式传递给我们的插件,插件可以通过props属性获取到该事件,如图:

Vue 自定义动态组件实例详解

可以看到页面已经生效了:

Vue 自定义动态组件实例详解

Vue.component(id, [definition])用于注册或获取组件。

Vue.use(plugin)用于安装 Vue.js 插件。如果插件是一个对象,必须提供 install 方法。如果插件是一个函数,它会被作为 install 方法。install 方法调用时,会将 Vue 作为参数传入。当 install 方法被同一个插件多次调用,插件将只会被安装一次。

举第二个栗子

我们再建一个文件夹,如图:

Vue 自定义动态组件实例详解

我们要写一个组件,能够显示外部传进来的内容,并在3秒后自动消失,代码如下:

Vue 自定义动态组件实例详解

接下来我们要在index.js里使用构造器来创建它,如图:

Vue 自定义动态组件实例详解

依旧在默认的main.js里引用刚刚的js文件,并加入到Vue实例上,这样我们就可以直接通过this.$seconddemo()来调用了,代码如下:

import SecondDemo from './components/global/seconddemo/index'Vue.prototype.$seconddemo = SecondDemo

在app.vue里使用它,发现插件加载成功了,如图:

Vue 自定义动态组件实例详解

Vue.extend(options)是 Vue 的构造器,用于创建一个“子类”。

统一管理自定义组件

当组件数量很多时,我们可以通过提供一个统一的出口文件来管理这些自定义组件,首先在global文件夹下新建一个index.js文件,代码如图:

Vue 自定义动态组件实例详解

index.js文件帮我们把所有自定义的组件都通过Vue.component注册了,最后export一个包含install方法的对象给Vue.use()使用。

这时候我们不需要在main.js里逐个添加动态组件了,只需要导入统一的index.js文件,并用Vue.use它就ok了。

Javascript 相关文章推荐
Prototype使用指南之dom.js
Jan 10 Javascript
JavaScript EasyPager 分页函数
May 25 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
Nov 13 Javascript
多个datatable共存造成多个表格的checkbox都被选中
Jul 11 Javascript
Jquery中val()表单取值赋值的实例代码
Aug 15 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
Aug 08 Javascript
javascript实现base64 md5 sha1 密码加密
Sep 09 Javascript
ajax在兼容模式下失效的快速解决方法
Mar 22 Javascript
详解Jquery Easyui的验证扩展
Jan 09 Javascript
微信小程序开发之Tabbar实例详解
Jan 09 Javascript
详解node-ccap模块生成captcha验证码
Jul 01 Javascript
基于jstree使用AJAX请求获取数据形成树
Aug 29 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
Mar 28 #Javascript
微信小程序之分享页面如何返回首页的示例
Mar 28 #Javascript
js中el表达式的使用和非空判断方法
Mar 28 #Javascript
JS实现左边列表移到到右边列表功能
Mar 28 #Javascript
JS中用EL表达式获取上下文参数值的方法
Mar 28 #Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
Mar 28 #jQuery
vue渲染时闪烁{{}}的问题及解决方法
Mar 28 #Javascript
You might like
极典R601SW收音机
2021/03/02 无线电
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
Javascript 陷阱 window全局对象
2008/11/26 Javascript
jquery $.getJSON()跨域请求
2011/12/21 Javascript
js+xml生成级联下拉框代码
2012/07/24 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
2016/11/06 Javascript
详解jQuery插件开发方式
2016/11/22 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
微信小程序之自定义组件的实现代码(附源码)
2018/08/02 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
Python进度条实时显示处理进度的示例代码
2018/01/30 Python
查看django版本的方法分享
2018/05/14 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
2019/08/09 Python
python能在浏览器能运行吗
2020/06/17 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
三八妇女节趣味活动方案
2014/08/23 职场文书
毕业证代领委托书
2014/09/26 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python