vue全局弹窗

效果:在任意页面,不需要引入组件,调用弹窗组件实例方法操作打开关闭 

 

1. 定义

1.1 定义弹窗页面

正常定义即可,需要定义方法show和hide控制组件变量显示及隐藏弹窗。

1.2 弹窗页面同级目录定义得Vue需要得js文件

注意: 搞了单例,调用多少次都是操作一个

import Vue from 'vue'
import FullLoginAd from './index.vue'

// 单例模式
let instance = null

function create (Component, props) {
    const vm = new Vue({
   /* render函数用来生成虚拟dom,接收一个createElement函数(一般称之h函数),
     并返回该函数的执行结果(生成的虚拟dom)。
      h函数接受三个参数,
      1.一个标签名或组件选项对象。
      2.与模板中属性对应的数据对象。
      3.子节点。
     生成的虚拟dom需要经过挂载($mount)才能变成真实dom
   */
    render: h => h(Component, { props })
    // 这里不指定宿主元素,因为直接指定body的话会将已有的内容替换掉。
    }).$mount() 
    /* 通过dom操作追加元素  $el可以获取真实dom */
    document.body.appendChild(vm.$el)
    /* 获取组件实例 */
    const comp = vm.$children[0]
    /* 添加销毁组件的方法 */
    comp.remove = function () {
      document.body.removeChild(vm.$el)
      vm.$destroy()
    }

    return comp
}

export default {
/* install方法实现的需求是 在使用组件时不需要再传入组件模板,只需传入参数,
   因此使用柯里化函数实现。*/
  install(Vue) {
    Vue.prototype.$fullLoginAd = function(options) {
      if (!instance){
        instance = create(FullLoginAd, options)
      }
      return instance
    }
  }
}

2. main.js使用

// 绑定到vue实例上创建登录框 import FullLoginAd from '@/components/tencentAir/ads/FullLoginAd/index.js' Vue.use(FullLoginAd)

 

3. 使用即可

// 创建实例,拿到实例对象,调用对象方法show

// 可以给show方法传递参数,达到弹窗动态展示数据得目的

this.$fullLoginAd().show()

this.$fullLoginAd().hide()

 

参考文章:

https://www.jianshu.com/p/9423f562c130

 

上一篇:Linux_005<用户管理2_组>


下一篇:转载-lambda sort