文件结构

component.vue

<template>
<div class="_vuedals" v-show="show">
<component v-if="options.component" :is="options.component" v-bind="options.props" v-on="options.events" ref="modalessComponent" ></component>
</div>
</template> <script>
import Bus from "./bus.js";
export default {
name:"vuedals",
data(){
return{
options:{},
show:false
}
},
created(){
var me = this;
var defval = {
props:[],
}
Bus.$on("open",function(options){
me.options = options;
me.show = true;
});
Bus.$on("close",function(options){
me.show = false;
});
},
mounted(){ },
methods:{ }
}
</script> <style>
._vuedals{
position: absolute;
top: 0;
left: 0;
z-index: 1000;
width: 100%;
height: 100%;
background: rgba(0,0,0,0.4);
}
</style>

  bus.js

let instance = null;

class EventBus {
constructor() {
if (!instance) {
this.events = {};
instance = this;
}
return instance;
} $emit(event, message) {
if (!this.events[event])
return; const callbacks = this.events[event]; for (let i = 0, l = callbacks.length; i < l; i++) {
const callback = callbacks[i]; callback.call(this, message);
}
} $on(event, callback) {
if (!this.events[event])
this.events[event] = []; this.events[event].push(callback);
}
} export default new EventBus();

  index.js

import Bus from './bus';
import Component from './component.vue'; export default {
install(Vue) {
// Global $vuedals property
Vue.prototype.$vuedals = new Vue({
name: '$vuedals', created() { },
methods: {
open(options = null) {
Bus.$emit('open', options);
}, close(data = null) {
Bus.$emit('close', data);
} }
}); Vue.component('vuedals', Component); }
};

  使用:

一、引入

import vuedals from './components/vuedals'

Vue.use(vuedals);

二、调用

import box from '../components/box.vue';

this.$vuedals.open({
component:box, //引入的模板文件
props:{title:"这是一个title"},
events:{
myEvent:function(){
console.log("myEvent....")
}
}
})

  

其中box.vue为

<template>
<div class="box">
这里是弹出层的内容
<p>{{title}}</p>
<li @click="myEvent">点击我</li>
<li @click="close">关闭弹出层</li>
</div>
</template> <script>
export default {
name: 'box',
data () {
return {
msg: ''
};
},
props:["title"],
methods: {
myEvent:function(){
this.$emit("myEvent",{});
},
close:function(){ console.log(this.$vuedals.close())
}
}
};
</script> <style>
.box{
margin: 40% auto 0;
width: 80%;
height: 200px;
background: #fff;
border-radius: 10px;
}
</style>

  效果:

vue弹窗组件的更多相关文章

  1. Vue列表组件与弹窗组件示例

    列表组件 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <me ...

  2. 从零开始徒手撸一个vue的toast弹窗组件

    相信普通的vue组件大家都会写,定义 -> 引入 -> 注册 -> 使用,行云流水,一气呵成,但是如果我们今天是要自定义一个弹窗组件呢? 首先,我们来分析一下弹窗组件的特性(需求): ...

  3. Vue - 简单实现一个命令式弹窗组件

    前言 在日常工作中弹窗组件是很常用的组件,但用得多还是别人的,空闲时间就自己来简单实现一个弹窗组件 涉及知识点:extend.$mount.$el 使用方式: this.$Confirm({ titl ...

  4. Vue.js(24)之 弹窗组件封装

    同事封装了一个弹窗组件,觉得还不错,直接拿来用了: gif图展示: 弹框组件代码: <template> <transition name="confirm-fade&qu ...

  5. 封装Vue Element的dialog弹窗组件

    我本没有想着说要封装一个弹窗组件,但有同行的朋友在问我,而且弹窗组件也确实在项目开发中用的比较多.思前想后,又本着样式统一且修改起来方便的原则,还是再为大家分享一个我所封装的弹窗组件吧. 其实,并不是 ...

  6. vue+element table的弹窗组件

    在处理表格编辑相关的需求,是需要做一个弹框进行保存的:或者查看表格数据的详细信息时,也是需要做弹窗: 当然 ,这是类似于这样的 ,当然 element 已经帮我们做好 弹窗这一块 主要 我想记录的是 ...

  7. vue的组件详解

    什么是组件 组件(Component)是 Vue.js 最强大的功能之一.(好比电脑中的每一个元件(键盘,鼠标,CPU),它是一个具有独立的逻辑和功能或界面,同时又能根据规定的接口规则进行互相融合,变 ...

  8. Vue 兄弟组件通信(不使用Vuex)

    Vue 兄弟组件通信(不使用Vuex) 项目中,我们经常会遇到兄弟组件通信的情况.在大型项目中我们可以通过引入vuex轻松管理各组件之间通信问题,但在一些小型的项目中,我们就没有必要去引入vuex.下 ...

  9. vue弹窗插件实战

    vue做移动端经常碰到弹窗的需求, 这里写一个功能简单的vue弹窗 popup.vue <template> <div class="popup-wrapper" ...

随机推荐

  1. Jenkins插件管理

    1.配置jenkins需要的maven.jdk路径 [root@db01 secrets]# echo $JAVA_HOME /application/jdk [root@db01 secrets]# ...

  2. (广度搜索)A - Prime Path(11.1.1)

    A - Prime Path(11.1.1) Time Limit:1000MS    Memory Limit:65536KB    64bit IO Format:%I64d & %I64 ...

  3. Maven、SpringBoot框架结构优化

    一.创建maven项目,名为test-parent,pom文件如下: ... <artifactId>test-parent</artifactId> <version& ...

  4. vins-mono源码解读

    https://blog.csdn.net/q597967420/article/details/76099409

  5. [No0000153]详解C# 迭代器【转】

    迭代器模式是设计模式中行为模式(behavioral pattern)的一个例子,他是一种简化对象间通讯的模式,也是一种非常容易理解和使用的模式.简单来说,迭代器模式使得你能够获取到序列中的所有元素而 ...

  6. [No0000D0] 让你效率“猛增十倍”,沉浸工作法到底是什么?

    一位编剧在三天内完成两万字的剧本,而在此之前,他曾拖延了足足半年.一名大四学生用一天半写了8000多字,一鼓作气拿下毕业论文. 有人说:“用了这个方法,我的效率猛增十倍.只用短短两小时,就摧枯拉朽地完 ...

  7. shell脚本之流程控制语句

    一.分支控制语句 1.if .. fi条件 if condition; then action fi 2.if .. else .. fi条件 if condition;then action; el ...

  8. take a cpu core offline

    [root@vrouter1 ~]# cat /sys/devices/system/cpu/online -,,- [root@vrouter1 ~]# cat /sys/devices/syste ...

  9. LeetCode 896 Monotonic Array 解题报告

    题目要求 An array is monotonic if it is either monotone increasing or monotone decreasing. An array A is ...

  10. 2018/03/07 每日一个Linux命令 之 cat

    每日一个Linux命令 2018-03-07 Linux 命令 cat cat [-参数] fileName 在之前的Linux使用中 cat 命令一直作为文本输出指令来使用,很少可以深入学习的该命令 ...