vue纯js调用公共组件弹框

使用vue.extend构建公共组件弹框

组键页面和我们平时构建需要引用的组件一样,如下图所示:

<template>
  <div v-if="isDialog">
    <h3>{{title}}</h3>
    <p>{{content}}</p>
    <button @click='clickConfirm()'>确定</button>
    <button @click="clickCancel()">取消</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      isDialog: false,
      title: "提示",
      content: "内容数据",
      resolve: "",
      reject: ""
    };
  },
  methods: {
    clickConfirm() {
      this.isDialog = false;
      this.resolve("confirm");
    },
    clickCancel() {
      this.isDialog = false;
      this.reject("cancel");
    },
    showMsgBox: function() {
        return new Promise((resolve, reject) => {
            this.resolve = resolve;
            this.reject = reject;
        });
    }
  }
};
</script>

新建一个js文件,如下图所示:

import messageBox from './index.vue'
export default function(Vue) {
    const Constructor = Vue.extend(messageBox);

    const Instance = new Constructor();
    Instance.$mount();
    document.body.appendChild(Instance.$el);
    Vue.prototype.$messageBox = ({ title, content }) => {
        Instance.isDialog = true;
        Instance.title = title;
        Instance.content = content;
        return Instance.showMsgBox()
            .then(val => {
                return Promise.resolve(val);
            })
            .catch(err => {
                return Promise.reject(err);
            });
    }
}

在mian.js里面引用,就可以去哪就调用了

import messageBox from './components/messageBox/index'
Vue.use(messageBox)
//引用方式 this.$messageBox({title:''content:''})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容