测试环境:nodejs+webpack,例子是看文章的,注释为自己的理解

创建一个toast.vue文件:

<template>
<div class="wrap" v-if="show">
<div>{{text}}</div>
<div>{{temp1}}</div>
</div>
</template> <script>
export default {
data () {
return {
temp1 : "你好vbyzc"
}
}
}
</script> <style scoped>
.wrap{
color:#fff;
background-color: rgba(0,0,0,0.8);
padding: 10px;
position: fixed;
top:50%;left: 50%;
border-radius: 10px;;
}
</style>

创建一个toast_index.js

import vue from 'vue'
import toastComponent from './toast' //使用vue的extend,以vue文件为基础组件,返回一个可以创建vue组件的特殊构造函数
const ToastConstructor = vue.extend(toastComponent)

function showToast(text,duration = 2000){
const toastDom = new ToastConstructor({
el : document.createElement('div'),
data(){
return {
text:text,
show:true
}
}
})
  //在body中动态创建一个div元素,后面自动会把它替换成整个vue文件内的内容
document.body.appendChild(toastDom.$el)
setTimeout(() => {toastDom.show=false},duration)
} function registryToast (){
//把showToast这个方法添加到uve的原型中,可以直接调用,当调用的时候就是执行函数内的内容
vue.prototype.$toast = showToast
} export default registryToast

最后一步,在入口js文件中:

import toastRegistry from './components/toast_index.js'//用这个方法注册组件,所有vue页面都可以使用,不用再import
//定义全局组件生成的有2个种方法,一种myPlugin={install(){...}},一种function myPlugin(){....}
//vue.use方法内部,会判断toastRegistry,如果是函数就直接执行,如果是object则执行它的install对象
//导为导入的toastRegistry是一个函数,所以也可以直接执行toastRegistry()
Vue.use(toastRegistry)

在任何vue文件中使用它:

<button @click="modifySendvalue">改传输到子组件的值</button>

showToast(){
this.$toast('哈哈哈哈');
}

总结

  • 创建的组件的dom结构,直接在body底部插入,在vue的app实例范围外,创建 之后,但组件仍然可以响应组件内的数据
  • 用来创建组件的基础vue文件内的data数据会被继承

vue通过extend动态创建全局组件(插件)学习小记的更多相关文章

  1. Vue.extend动态注册子组件

    写本篇文章之前其实也关注过vue中的一个关于加载动态组件is的API,最开始研究它只是用来实现一个tab切换的功能,使用起来也蛮不错的. is 预期:string | Object (组件的选项对象) ...

  2. Vue中通过Vue.extend动态创建实例

    Vue中通过Vue.extend动态创建实例 在Vue中,如果我们想要动态地来控制一个组件的显示和隐藏,比如通过点击按钮显示一个对话框或者弹出一条信息.我们通常会提前写好这个组件,然后通过v-if = ...

  3. vue子路由设置、全局组件、局部组件的原生写法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Vue创建全局组件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Vue.js 3 Step 创建一个组件

    Step1:Vue.extend()创建组件 Step2:Vue.component()注册组件,注册的标签一定要用小写 Step3:挂载点使用组件 <!doctype html> < ...

  6. vue自定义组件(vue.use(),install)+全局组件+局部组件

    相信大家都用过element-ui.mintui.iview等诸如此类的组件库,具体用法请参考:https://www.cnblogs.com/wangtong111/p/11522520.html ...

  7. pyqt动态创建一系列组件并绑定信号和槽(网友提供学习)

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #如上图要求:创建指定多个复选框,一种是通过QT设计器Designe ...

  8. Vue.use自定义自己的全局组件

    通常我们在vue里面使用别人开发的组件,第一步就是install,第二步在main.js里面引入,第三步Vue.use这个组件.今天我简单的也来use一个自己的组件. 这里我用的webpack-sim ...

  9. 动态创建angular组件实现popup弹窗

    承接上文,本文将从一个基本的angular启动项目开始搭建一个具有基本功能.较通用.低耦合.可扩展的popup弹窗(脸红),主要分为以下几步: 基本项目结构搭建 弹窗服务 弹窗的引用对象 准备作为模板 ...

随机推荐

  1. Oracle 查询重复索引列

    SELECT /*+ rule */ a .table_owner, a.table_name, a.index_owner, a.index_name, column_name_list, colu ...

  2. python之zip打包

    import zipfile # 压缩 z = zipfile.ZipFile('z.zip', 'w') z.write('xo.xml') z.write('xxxoo.xml') z.close ...

  3. FineUIPro/Mvc/Core/JS v4.2.0 发布了(老牌ASP.NET控件库,WebForms,ASP.NET MVC,Core,JavaScript)!

    还记得 10 年前那个稍微青涩的 ExtAspNet 吗,如今她已脱胎换骨,变成了如下 4 款产品: FineUIPro:基于jQuery的经典款ASP.NET WebForms控件,之前的FineU ...

  4. python使用redis

    版本: python 3.5 redis 3.0.1(redis的安装 pip install redis) 1.连接 import redis r = redis.Redis(host='192.1 ...

  5. Neutron flat network 学习

    flat network 是不带 tag 的网络,要求宿主机的物理网卡直接与 linux bridge 连接,这意味着: 每个 flat network 都会独占一个物理网卡.   在 ML2 配置中 ...

  6. 手动用tomcat启动war包,无法访问web项目

    先说一下自己采的小坑,网上大多解答都是复制来复制去,不说重点在哪.我这里简单总结下访问路径问题 一.用idea打成war包,具体步骤如下图: 步骤:在项目配置选Artifacts新建Web Appli ...

  7. 【刷题】若串 =’software’ ,其子串数目为:37

    子串 子串是母串中的一部分,可以是母串本身,也可以是空字符串 设串中字符数为n,则其子串数目为:s=(1+n)*n/2+1 具体地: 长为0的子串:1 长为1的子串:8 长为2的子串:7 长为3的子串 ...

  8. centos django Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING

    os环境 centos python2.7.5 django1.10.8 class AdminAutoRunTask(View): """ 自动跑外放任务 " ...

  9. 精心收集的 95 个超实用的 JavaScript 代码片段( ES6+ 编写)

    https://www.html.cn/archives/8748#table-of-contents https://www.haorooms.com/post/js_regexp

  10. 鼠标事件-MouseEvent【转】

    原文地址> 鼠标事件-MouseEvent 当鼠标进行某种操作时,就会生成一个event对象,该对象记录着鼠标触发事件时的所有属性. 可以通过如下方法在google控制台打印出 MouseEve ...