2021-06-13

全局弹窗

参考文章Vue服务式全局调用弹出框插件
弹窗使用vant样式

1 main.js

import Vant from 'vant'
Vue.use(Vant)

2 创建弹窗文件 popup

// popup.vue
<template>
  <div class="popup_box">
    <van-overlay
      :show="show"
      @click="closePopup"
      v-if="show"
    >
      <div class="wrapper">
        <div
          class="block"
          @click.stop="boxClick"
        >{{contentTxt}}</div>
      </div>
    </van-overlay>
  </div>
</template>
<script>
export default {
  name: 'popup',
  data () {
    return {
      show: false,
      contentTxt: '----'
    }
  },
  methods: {
    getProductCheckResult (options) {
      // let arr = []
      // for (key in options) {
      //   if (options.hasOwnProperty(key)) {
      //     app.push(key)
      //   }
      // }
      let arr = Object.keys(options)
      console.log(arr);
      arr.forEach(item => {
        this[item] = options[item]
      });
    },
    closePopup () {
      console.log('closePopup');
      this.show = false
    },
    boxClick () {
      console.log('boxClick');
    }
  }
}
</script>
<style lang="sass" scoped>
.wrapper
  display: flex
  align-items: center
  justify-content: center
  height: 100%

.block
  width: 120px
  height: 120px
  background-color: #fff
</style>
// popup.js
/**
 * 调用 this.$Dialog.getProductCheckResult({
 * 		show: true,
      	contentTxt: '测试001'
      })
 * 
 */

import popup from './Popup.vue'

export default {
  install(Vue) {
    const PopupInstance = Vue.extend(popup)
    let popupInit;
    const initInstance = () => {
      // 实例化vue实例
      popupInit = new PopupInstance();
      let popupEl = popupInit.$mount().$el;
      document.body.appendChild(popupEl);
    };
    Vue.prototype.$Dialog = {
      getProductCheckResult(options) {
        if (!popupInit) {
          initInstance();
        }
        console.log(options)
        popupInit.getProductCheckResult(options)
      }
    }
  }
}

3 main.js

//main.js 导入
import globalAlert from '../xxx/popup'
Vue.use(globalAlert)

4 使用

//. xxx.vue
<template></template>
export default {

	......
	methods: {
    test () {
      this.$Dialog.getProductCheckResult({
 		show: true,
      	contentTxt: '测试001'
      })
    }
  }
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值