vue2中封装弹框插件

 背景:
   
项目中需要展示一些协议内容,因为要调用页面很多,每个页面引用组件很麻烦,这时候插件就帮了大忙

 1.首先实现弹框组件protocol.vue

也可以加入输入框,可以通过successBtnPro方法把输入的值传过去this.$emit('successBtn',this.data.title);

<!-- 封装插件 -->
<template>
     <a-modal v-model:visible="visible" title="Basic Modal" @ok="successBtnPro()" @cancel="cancelBtnPro()">
        <p> {{title}}</p>
    </a-modal>
</template>
<script>
export default{
    data(){
        return{
            visible:false, 
            title: '需要显示的内容' 
        }
    },
    methods: {
    successBtnPro (e) {
     
        this.visible = false;
        this.$emit('successBtn',this.data.title);
    },
    cancelBtnPro (e) {
        this.visible = false;
        this.$emit('cancelBtn');
    },
  }
}
</script>

2.创建一个用于创建和管理弹框的插件:

protocoluse.js

import protocol from './protocol.vue'
const protocolUse = {};
    protocolUse.install = function(Vue,options){
        Vue.prototype.$popupProtocol = (options={}) =>{
            let ProtocolConstructor = Vue.extend(protocol);
            let instance= new ProtocolConstructor({
                el: document.createElement('div')
            });
            document.body.appendChild(instance.$el);
            Object.assign(instance.$data, options);
            return new Promise((resolve, reject)=>{
                instance.$on('successBtn',function(res){
                    console.log('同意1')
                    resolve(res);
                })
                instance.$on('cancelBtn',function(){
                    console.log('不同意1')
                    reject();
                })
                
            });
        }
    }
    export default protocolUse;

3.在主应用中使用这个插件main.js:

import protocolUse from './plugs/protocol/protocoluse';

Vue.use(protocolUse);

4.如何使用

<template>
    <p @click="handleClick">点击下一</p>
</template>
<script>
export default{
    data(){
        return{

        }
    },
    methods:{
        handleClick(){
            this.$popupProtocol({
                    visible: true,
                    title:'hhahhhhhhasdsafsfa',
                }).then(res => {
                    console.log('同意11')
                    console.log(res)
                
                }).catch(res => {
                
                    console.log('不同意12')
                    console.log(res)

                })
        }
    }
}
</script>

相关推荐

  1. vue2封装

    2024-05-15 22:16:20       33 阅读
  2. vue3如何父组件使用,子组件关闭

    2024-05-15 22:16:20       29 阅读
  3. vue3:ace-builds封装ace-editor

    2024-05-15 22:16:20       62 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-15 22:16:20       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-15 22:16:20       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-15 22:16:20       87 阅读
  4. Python语言-面向对象

    2024-05-15 22:16:20       96 阅读

热门阅读

  1. 牛客周赛 Round 39vp(A--F)

    2024-05-15 22:16:20       36 阅读
  2. XML元素

    2024-05-15 22:16:20       35 阅读
  3. 嵌入式—模块代码(一)

    2024-05-15 22:16:20       36 阅读
  4. LabVIEW做仪器测试不知道是否适用

    2024-05-15 22:16:20       33 阅读
  5. 简单讲解SDL 互斥锁和信号量

    2024-05-15 22:16:20       25 阅读