一款vue弹框可设置最大化最小化,多选的插件库

文档地址如下: http://wayla.gitee.io/compage/

1.使用背景

elementUI提供的el-dialog弹框无法对其最大化最小化和移动,不够灵活,有事因为甲方的项目需求,只用el-dialig可能无法很好的达到预想的效果,因此推荐这款vue-pubilc-layer!

2.安装

npm install vue-pubilc-layer -s

这里如果用yarn add可能会下载空包,可以在node_modules中找到vue-pubilc-layer空包 继续yarn install

3.VUE全局设置,并封装起来

(1)在项目文件的main.js中设置如下

import layer from 'vue-pubilc-layer';
Vue.use(layer);

(2)在公共组件添加一个ts文件 这路取名 LayDialog.ts,并在该文件下写如下代码:

import Vue, { VNode } from 'vue';
//四个参数 1.this传过去  2.弹框标题  3.组件内容,可以是vue组件,html字符串,dom元素对象和类型对应 4.需要传递的数据
function layDialog(this_: any, title: string, subCom: any, sunData: any = null) {
  this_.$dialog.open({
    title: title,
    // shade: true,
    multiple: true,
    move: true,
    hasMax: false,
    bottomOff: 50,
    leftOff: 500,
    area: {
      width: '45%',
    },
    content: {
      type: 'vue',
      subCom: subCom, //type是vue的话,这里就是对应vue组件名
      subData: sunData, //这是传给subCom组件的数据 可以不传
    },
  });
}
export default { layDialog };
//对全局定义$LayDialog 方便在其他组件直接使用
declare module 'vue/types/vue' {
  interface Vue {
    $LayDialog: any;
  }
}

然后在main,ts中把引入上面的ts文件

import LayDialog from '@/views/Components/LayerDialog/LayDialog';

4.在任一组件中使用

 	 this.$LayDialog.layDialog(
        this,
        this.mapPointInfo.name, //标题
        MapClickDialogInLayer, //直接import后写在这
        this.mapPointInfo //传递给MapClickDialogInLayer组件的数据
      );

5. 注意

改弹框的样式不可以在scoped的环境下设置,因为他和app同级 ,vue无法找到该样式

可以参考我的项目代码

<style lang="scss">
	.w-dialog-shade {
	  z-index: 2000 !important;
	}
	.w-dialog {
	  background: $dialog-background !important;
	  z-index: 2001 !important;
	}
	.w-dialog-body {
	  padding: 0 !important;
	  background-color: $dialog-background !important;
	}
	.w-dialog-head {
	  width: 97% !important;
	  margin: auto;
	  background: $dialog-background !important;
	  border-bottom: 1px solid $header-title-border !important;
	  .dialog-head-title {
	    color: $text-main-color !important;
	    line-height: 16px;
	    font-size: 16px;
	    font-weight: 600;
	    padding-left: 15px !important;
	    border-left: 3px solid $header-title-color;
	  }
	  .dialog-head-btn {
	    i {
	      width: 18px !important;
	      height: 18px !important;
	      margin-right: 10px !important;
	    }
	  }
	}
</style>

6. 效果如下(内容保密,右上可以最小化)

最大化我这里不需要就禁用了,可以在封装函数那里设置出来 可参考文档
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue3中,要实现弹框最大化设置,可以通过以下步骤实现: 1. 创建一个全局的事件总线(Event Bus),用于在不同组件之间传递事件。 ```javascript // event-bus.js import { createApp } from 'vue'; const app = createApp({}); export const eventBus = app.config.globalProperties.$eventBus = app._instance.appContext.config.globalProperties.$eventBus = new app._instance.constructor(); ``` 2. 在需要实现最大化的组件中,添加一个最大化按钮,并在点击时触发一个自定义事件。 ```html <template> <div> <button @click="maximize">最大化</button> <div class="content" :class="{ 'maximized': isMaximized }"> <!-- 内容 --> </div> </div> </template> <script> import { eventBus } from '@/event-bus.js' export default { data() { return { isMaximized: false } }, methods: { maximize() { this.isMaximized = !this.isMaximized; eventBus.$emit('maximize', this.isMaximized); } } } </script> <style> .maximized { position: fixed; top: 0; left: 0; right: 0; bottom: 0; } </style> ``` 3. 在需要响应最大化事件的组件中,监听事件,并根据事件传递的参数来处理最大化逻辑。 ```html <template> <div> <div class="dialog" :class="{ 'maximized': isMaximized }"> <!-- 弹框内容 --> </div> </div> </template> <script> import { eventBus } from '@/event-bus.js' export default { data() { return { isMaximized: false } }, created() { eventBus.$on('maximize', (isMaximized) => { this.isMaximized = isMaximized; }); } } </script> <style> .maximized { width: 100%; height: 100%; left: 0; top: 0; } </style> ``` 在这个例子中,我们通过一个全局事件总线来实现弹框最大化的功能。在需要最大化的组件中,添加一个最大化按钮,并在点击时触发一个自定义事件。同时,根据最大化状态更新组件的样式。在需要响应最大化事件的组件中,监听事件,并根据传递的参数来更新组件的样式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值