vue拿来写插件,会不会太那啥?

请跟我念,“不会,符合业务需求才是你的老板最想要的。”

如何封装一个可以全局调用的vue插件

其原理其实相当简单,通过new Vue(vueComponentConstructor)您可以轻松的建立一个vue实例,在该实例上您可以操作方法、操作数据、监听数据变化,使用各种钩子,对开发者而言并没有任何阻碍。

我们生产了一个实例后该如何操作

请跟我来,写一个实现。首先,我们先写一个vue组件。

// vue组件 A.vue
<template>
<el-dialog title="选择文件夹" :visible.sync="visible" @close="close">
<div class="dirtree">
<el-tree
:props="dirtree"
:load="loadDir"
:render-content="refresh"
:expand-on-click-node="false"
@node-click="selectDir"
lazy
>
</el-tree>
</div>
<el-button type="success" @click="ensureSelectedDir">确定</el-button>
<el-button @click="cancelSelectedDir">取消</el-button>
</el-dialog>
</template> <script>
import api from '@/api'
export default {
data () {
return {
dirtree: {
label: function (data, node) {
return data.name
},
data: null,
isLeaf: true
},
visible: false,
selectedDir: ''
}
},
methods: {
close () {
this.$nextTick(() => {
// 关闭时销毁元素
this.$destroy(true)
this.$el.parentNode.removeChild(this.$el)
})
},
ensureSelectedDir () {
}, cancelSelectedDir () {
}, selectDir (data) {
}, refreshDirData ($event, ctx) {
}, loadDir (node, resolve) {
}, refresh (h, ctx) {
}
}
}
</script>

当然,如果您的构建系统不支持vue-loader和webpack,您也可以使用以下写法


export default const Dialog = {
name: 'xxx',
template: `
<div>
// some template
</div>
`,
data () {
return {}
},
methods: {}
}

第二步,生产api出口


// 生成调用方法
import Vue from 'vue'
import A from './A.vue' let AConstructor = Vue.extend(A) export default function (options = {}) {
let instance = new AConstructor({
data: options // 混入初始化数据,也可以直接通过merge的方式把数据插入实例对象上
})
instance.vm = instance.$mount()
document.body.appendChild(instance.vm.$el)
instance.vm.visible = true // 一些生成后的data成员操作
return instance.vm
}

您可以将其生成单一实例,也可以每次调用生成不同实例,在关闭时调用$destroy配合destroyed或者beforeDestroy对存在页面上的vm.$el进行销毁。

一些提示

您可以将实例引用挂载到任何您想挂载的地方方便调用,您也可以使用Promise配合vue实例里的自定义方法或者其他方法实现promise链或者async await的灵活写法。这都取决于您。

原文地址:https://segmentfault.com/a/1190000014150243

如何制作一个类似jquery插件的vue插件的更多相关文章

  1. 制作一个类似苹果VFL的格式化语言来描述UIStackView

    在项目中总是希望页面上各处的文字,颜色,字体大小甚至各个视图控件布局都能够在发版之后能够修改以弥补一些前期考虑不周,或者根据统计数据能够随时进行调整,当然是各个版本都能够统一变化.看到这样的要求后,第 ...

  2. 如何制作一个类似Tiny Wings的游戏(2) Cocos2d-x 2.1.4

    在第二篇<如何制作一个类似Tiny Wings的游戏>基础上,增加添加主角,并且使用Box2D来模拟主角移动,原文<How To Create A Game Like Tiny Wi ...

  3. 如何制作一个类似Tiny Wings的游戏 Cocos2d-x 2.1.4

    在第一篇<如何使用CCRenderTexture创建动态纹理>基础上,增加创建动态山丘,原文<How To Create A Game Like Tiny Wings with Co ...

  4. 封装一个类似jquery的ajax方法

    //封装一个类似jquery的ajax方法,当传入参数,就可以发送ajax请求 //参数格式如下{ // type:"get"/"post", // dataT ...

  5. 介绍一个基于jQuery的Cookie操作插件

    在网页客户端,我们经常会遇到读取或者设置cookie的情况,如果用纯生的js我们可能会遇到一些兼容性带来的麻烦,这里给大家介绍一个比较实用jquery操作cookie的插件,插件的源代码如下: jQu ...

  6. 自己实现一个类似 jQuery 的函数库

    假如我们有一个需求,需要给元素添加样式类,使用原生的JS很容易搞定. 1 抽取函数 function addClass(node, className){ node.classList.add(cla ...

  7. 做一个类似JQuery获取DOM对象的$()

    在dom操作时,有时根据id获取单个对象.有时根据className获取多个对象.平常可能我们用两个函数来实现这两个功能.不过我将它们整合了一下,目前使用情况良好,函数如下: view source ...

  8. 手动模拟一个类似jquery的ajax请求

    var $ = { parms:function(obj){ var str = ''; for(var k in obj){ str +=k+'='+obj[k]+'&'; } str = ...

  9. 分享15款为jQuery Mobile定制的插件

    jQuery Mobile 1.0 已经发布了, 做为jQuery的移动设备类库, 并且依靠着jQuery这个及其受欢迎的类库,必将带给大家不一样的使用体验,基于jQuery Mobile的插件开发必 ...

随机推荐

  1. 如何更改iTunes备份地址(修改iphone ipad 备份地址) itunes文件目录修改方法 【亲测有效,附带原理说明】

    前言 C盘空间有限,但是iTunes就是那么龌龊,只能把手机备份存到C盘.那么怎么才能把备份文件存到其他分区的文件夹里面呢? 当时我想先看看度娘,看看有没有现成的! 结果 nnd!! 我看了一大堆相关 ...

  2. luogu1197 [JSOI2008]星球大战

    题目大意 有一个无向图,每次删除一个节点,求删除后图中连通块的个数.(如果两个星球可以通过现存的以太通道直接或间接地连通,则这两个星球在同一个连通块中) 题解 连通块?用并查集可以找到一个连通块,但是 ...

  3. DMA(direct memory access)直接内存访问

    DMA(Direct Memory Access),这里的 memory,指的是计算机的内存,自然与外存(storage)相对.这里的关键词在 Direct (直接),与传统的相对低效的,需要通过 C ...

  4. PCB Genesis加邮票孔(邮票孔增加方向判断--左右上下)实现算法

    之前没解决的问题,当时一下卡在用户界面选择邮票孔增加的方向(上下左右) 与邮票孔实际方位之前的逻辑与非判断上卡壳了,导致一下没进展下去. 回头看原来如此简单 ,将此点记录一下. 1.垂直线定义:80- ...

  5. .NET Core Run On Docker By Kubernetes 系列文章汇总

    前言介绍 .NET Core是微软新一代主力编程平台,开源.免费.跨平台.轻量级.高性能,支持Linux.Docker.k8s等环境,适合开发微服务.云原生.大型互联网应用.全开源解决方案. Dock ...

  6. Android PopWindow的替代品BasePopup

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/109 背景描述 最近一段时间,又看到了这个开源项目Base ...

  7. C# 获取Enum 描述和值集合

    //获取枚举的值 public static IEnumerable<T> GetEnumValues<T>() where T : struct { T[] values = ...

  8. 基于NPOI的扩展

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using NPOI.HSS ...

  9. RabbitMQ .NET消息队列使用入门(一)【简单示例】

    首先下载安装包,我都环境是win7 64位: 去官网下载 otp_win64_19.0.exe 和rabbitmq-server-3.6.3.exe安装好 然后开始编程了: (1)创建生产者类: cl ...

  10. java的封箱和拆箱

    1.基本概念 字节的单位:byte.位的单位:bit,1byte=8bit 2.8种基本数据类型 4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型和1种用于表示真值的bool ...