目前功能最全的平台全局弹窗组件

  1. 支持市面上不支持的,确很想支持的功能。
  2. 支持h5 | app | 小程序平台
  3. 支持弹窗缓存池,再多弹窗没处理也不怕,同一时间只显示一个弹框,按先进后出顺序处理弹窗业务
  4. 缓存池支持弹窗去重,定义相同弹窗key,再多的接口401错误也只弹一个重新登录窗体。
  5. 支持单行输入及多行输入
  6. 标题,内容,按钮支持完全样式修改
  7. 内容支持富文本渲染
  8. 支持异步业务操作
  9. 支持静默删除弹窗(选择性删除及全量删除)
  10. 支持动态更新弹窗数据

git官网地址:ayy-modal: uniapp 全局弹窗

DCloud插件地址:uniapp 全局弹窗 - DCloud 插件市场

有一个小问题:在App端每次打开关闭窗口会触发当前页面的onShow和onHide生命周期,需要处理该问题请参考:uniapp在App端定义全局弹窗,当打开关闭弹窗会触发onShow、onHide生命周期怎么解决?-CSDN博客

  • 下载弹窗插件,然后删除git
git clone https://gitee.com/osaiyoyou/ayy-modal.git

  • 把下载的ayy-modal插件放在uni_modules目录下

4ef710cf63b1475a9c12fb760b970057.png​

  • 组件全局引入(main.js)
// #ifdef APP-PLUS || H5 || MP
import ayyModal from '@/uni_modules/ayy-modal/components/ayy-modal/ayy-modal.js'
//ayyModal.config.confirmColor = '#00B4BF' //样式配置表配置需要放在最前面配置才会生效
// #endif

dd2bc0dc95ee4f7cac925fad9a164afe.png​

  • pages.json 组件easycom全局引入
	"easycom": {
		"ayy-modal": "@/uni_modules/ayy-modal/components/ayy-modal/ayy-modal.vue"
	}

2a0db209e48f400a946c03e0709d11f7.png​

 设置弹窗默认标题,如果没有传title就默认。

	// 设置标题
	if(options.hasOwnProperty('title')){
		options.title = options.title 
	}else {
		options.title =  "提示"
	}

 

  • 如果支持APP端, 那么需要添加如下配置

1、pages.json 注册页面路由(注意pages.json对json有严格校验,最后一个节点不允许有‘"," 所以以下代码{}前后是否需要加逗号看你将下面代码加在那个位置) 

// #ifdef APP-PLUS
, {
    "path" : "uni_modules/ayy-modal/components/ayy-modal/ayy-modal",
    "style": {
		"navigationStyle": "custom",
		"backgroundColor": "transparent",
		"disableSwipeBack": true,
		"app-plus": {
			"animationType": "fade-in",
			"background": "transparent",
			"popGesture": "none",
			"bounce": "none"
		}
	}
},
// #endif

45a16a9b58bc4fa6b9188a980132b17f.png​

2、需要重新设置弹窗的路径,否则在APP弹窗无效

		uni.navigateTo({
			url: '/uni_modules/ayy-modal/components/ayy-modal/ayy-modal'
		})

a21639e99df84a8aa0ec10963db3d514.png

  • 如果需要支持小程序,那么需要添加如下配置

1、安装 vue-inset-loader,该插件主要是在每个页面将组件标签<ayy-modal></ayy-modal>写入
npm install vue-inset-loader --save-dev

2、配置vue.config.js

const path = require('path')
module.exports = {
	configureWebpack: {
		module: {
			rules: [{
				test: /\.vue$/,
				use: {
					// loader: "vue-inset-loader"
					//针对Hbuilder工具创建的uni-app项目
					loader: path.resolve(__dirname,"./node_modules/vue-inset-loader")
				}
			}]
		}
	}
}

182ba162831a463492837a29d10373ec.png​3、pages.json配置文件中添加insetLoader

	// #ifdef MP
	,
	"insetLoader": {
		"config": {
			"ayyModal": "<ayy-modal></ayy-modal>"
		},
		// 全局配置
		"label": ["ayyModal"],
		"rootEle": "view"
	}
	// #endif

a64f6b0b25fc4bf6810b0699d27e18a8.png​

  • 编译小程序报错

编译小程序如果遇到vue和vue-template-compiler版本不一样报错,请参考解决方案:https://blog.csdn.net/weixin_52830464/article/details/144062731

  • 使用示例
uni.$ayyModal.show({
	title: "我是标题",
    content: "我是内容",
    showCancel:false,
    confirmFun: () => {		
			
    }
})

uni.$ayyModal.show({
	title: "我是标题",
	content: "我是内容"
})
uni.$ayyModal.show({
	key: "LoginKey",
	title: "我是标题",
	content: "指定唯一标识key,相同key只渲染最后一个key弹窗"
})
uni.$ayyModal.show({
	key: "LoginKey",
	title: "我是标题2",
	content: "指定唯一标识key,相同key只渲染最后一个key弹窗"
})

uni.$ayyModal.show({
	key:"delete",
	title: "我是标题",
	content: "隐藏取消按钮",
	showCancel: false,
})

uni.$ayyModal.show({
	title: "使用富文本",
	content: "<span style='color:red;'>我们都是中国人我们都是中国人我们都是中国人我们都是中国人</span>",
	contentMode: 'rich-text',
})

uni.$ayyModal.show({
	title: "温馨提示",
	content: "使用单行输入",
	editable: true,
	confirmFun: (data) => {
		console.log(`inputText=>`+data.inputText)
	}
})

let vm = uni.$ayyModal.show({
	title: "温馨提示",
	content: "使用多行输入",
	editable: true,
	inputMode: 'textarea',
	placeholderText: '请输入补充内容',
	confirmFun: (data) => {
		console.log(`inputText=>`+data.inputText)
	}
})

uni.$ayyModal.show({
	key: "sleep-pop",
	title: "异步关闭弹窗",
	content: "(已支持部分智能设备同步、手动填写)",
	contentStyle: "color:#828282;font-size: 32rpx;line-height: 48rpx;",
	asyncClose: true,//异步关闭窗口,需要自己调用remove接口关闭窗口(有页面跳转的需要先关闭弹窗再做页面跳转)
	confirmFun: (data) => {
		uni.$ayyModal.remove('sleep-pop')
		uni.navigateTo({
			url: '/clockIn/pages/sleepData'
		})
	}
})
  • 弹窗操作API
//删除单个弹窗
uni.$ayyModal.remove('delete')
//删除全部弹窗
uni.$ayyModal.removeAll()
//删除全部弹窗,排除的key不删除
uni.$ayyModal.removeAll("delete2,delete1")
//修改弹窗内容(以标题为例)
vm.title = '12123123123'
uni.$ayyModal.update(vm)

效果图

483285430f144904b7c8a029ca1848cd.png​8424cf9df9fe4c8f90df8a385a051b7d.png​ee258bdab83f4efda2eda12691e10d11.png​958beec24e8c421abd0030f1a346a02e.png​f4a69a9357bc4a18b5e8195c52294afa.png​1f89591f761949a78f5910c0bfd9f297.png​

更多推荐