uniapp自定义showModal,纯js调用,支持富文本,支持slot

本文介绍了如何在Vue应用中使用自定义showModal组件,该组件扩展了uni.showModal的功能,支持全局样式设置、富文本、slot内容插入,并指导了如何准备、导入和使用该组件,以及替代uni.showModal的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义showModa说明

可以自定义界面的showModal,全局统一设置弹窗样式,直接通过js调用,使用方法与uni.showModal一致但是扩展了更多功能,体验极佳。

本组件的目的是更简单的弹出自定义样式的提示框,content中的内容默认只是作为提示使用,如果某页面需要更复杂的自定义模态弹窗(如弹窗中增加输入框、增加点击事件等),建议同时使用其他模态弹窗组件(如:uni-popup

使用方法

一、准备工作

1.1引入vuex

因为本组件的功能是基于vuex写的,所以需要先在main.js中import vuex
使用hbuilderx开发uniapp默认内置了vuex,如果是通过脚手架使用的uniapp,则需要先通过npm install vuex --save​​安装

import Vuex from 'vuex'
Vue.use(Vuex)

在这里插入图片描述

1.2在main.js中引入initModal 和showModal

//自定义modal组件
import initModal from "@/components/show-modal/initModal.js"
import showModal from "@/components/show-modal/show-modal.vue"
initModal(Vue);
Vue.component('show-modal', showModal);

在每一个用到showModal的页面view底部加入下方组件引用(小程序不支持组件全局混入,虽然麻烦了一些,但是也没有很麻烦)
组件做过额外处理,如果页面没有引入组件,js调用时会拉起原生showModal,不会无反应或者报错。
注意:vue的规则下,template中只能有一个根view,所以这个组件需要放在根view下边

<show-modal ref="showModal"></show-modal>

二、常规使用

this.$showModal({
	title:'提示',
	content:'这是一个自定义样式的提示信息',
	//如果不需要显示取消按钮加上下面这行(跟uni.showModal一样)
	//showCancel:false,
	success:(res)=>{
		if(res.confirm){
			//点击了确认按钮
		}else{
			// 点击了取消按钮
		}
	}
})

在这里插入图片描述

如果各位需要用自定义样式替换掉现有项目的uni.showModal,则只需要全项目搜索uni.showModal,然后替换为this.$showModal,然后在每个调用的vue页面引入上方组件即可。很方便!!

三、富文本使用

本组件的富文本底层实现是基于uniapp的rich-text。所以有些html标签不支持,支持的标签参考rich-text(uniapp官方文档)
如果需要更完善的富文本功能,可以在uniapp插件市场找相关的富文本组件(推荐uParse 富文本解析),然后自行修改show-modal.vue 将里边的rich-text替换成新的富文本组件

this.$showModal({
	title:'提示',
	rich:'<div style="color:red">我是一个富文本提示</div>',
	success:(res)=>{
		if(res.confirm){
			//点击了确认按钮
		}else{
			// 点击了取消按钮
		}
	}
})

在这里插入图片描述

四、slot使用

<show-modal ref="showModal">
	我是slot消息
</show-modal>

直接在引入的组件中写入自定义slot代码
然后调用this.$showModal 方法,
注意:使用在使用slot时,showModal方法不可以传入content或者rich

this.$showModal({
	title:'提示',
	success:(res)=>{
		if(res.confirm){
			//点击了确认按钮
		}else{
			// 点击了取消按钮
		}
	}
})

插件下载

<think>好的,用户想将u-modal修改成uni.showModal的样式。首先,我需要理解两者的区别。u-modal可能是他们项目中自定义的组件,而uni.showModaluniapp官方的API。用户可能遇到了样式不一致的问题,或者想统一使用官方组件。 接下来,我得回忆一下uni.showModal的特点。它的样式是系统原生的,在不同平台表现可能不同,比如iOS和Android的按钮位置可能相反。而u-modal如果是自定义的,可能更灵活,但需要手动调整样式和交互。 然后,用户可能希望保持原有功能的同时,改用官方API,提高兼容性或减少维护成本。需要考虑uni.showModal的参数,比如title、content、showCancel、cancelText、confirmText等,以及回调函数success、fail、complete。 可能需要逐步替换代码中的u-modal调用,调整参数名称和结构。例如,将自定义的confirm和cancel回调整合到success回调中,通过res.confirm来判断用户点击的是确认还是取消。 还要注意样式差异,比如按钮颜色、排列方式,这些官方API可能无法自定义,需要用户接受平台原生样式,或者通过其他方式调整。如果用户有特殊样式需求,可能需要结合使用其他组件或自定义弹窗。 另外,测试不同平台下的表现很重要,特别是按钮顺序和样式是否与预期一致。如果有问题,可能需要条件编译或额外处理。 总结步骤应该是:替换组件调用方式,调整参数,处理回调,测试多平台兼容性,最后处理样式差异。需要提醒用户注意API的限制,比如无法自定义按钮颜色,或者内容区域的富文本支持情况。</think>要将 `u-modal` 修改为 `uni.showModal` 的样式,可按以下步骤操作(以Uniapp框架为例): **一、参数对照调整** ```javascript // 原u-modal调用 u-modal({ title: '提示', content: '确认删除吗?', confirmText: '确定', cancelText: '取消', confirmColor: '#2979FF', cancelColor: '#909399', success: (res) => { if (res.confirm) { console.log('点击确定') } else if (res.cancel) { console.log('点击取消') } } }) // 修改为uni.showModal uni.showModal({ title: '提示', content: '确认删除吗?', confirmText: '确定', cancelText: '取消', confirmColor: '#2979FF', // 仅微信小程序生效 cancelColor: '#909399', // 仅微信小程序生效 success: (res) => { if (res.confirm) { console.log('点击确定') } else if (res.cancel) { console.log('点击取消') } } }) ``` **二、主要差异说明** 1. 按钮颜色限制: - `confirmColor/cancelColor` 仅微信小程序生效 - 其他平台使用系统默认颜色 2. 按钮顺序差异: - iOS平台:取消按钮在左,确认按钮在右 - Android平台:确认按钮在左,取消按钮在右 3. 样式特性: - 无法修改弹窗圆角 - 无法自定义内容区域样式 -支持插入HTML富文本 **三、扩展方案(需要自定义样式时)** ```javascript // 使用uni-popup组件实现自定义弹窗 <uni-popup ref="popup" type="dialog"> <uni-popup-dialog title="自定义标题" content="自定义内容" :duration="2000" :before-close="true" @close="close" @confirm="confirm" ></uni-popup-dialog> </uni-popup> // 调用方式 this.$refs.popup.open() ``` **四、注意事项** 1. 使用 `showModal` 时注意平台差异 2. 需要自定义UI时推荐使用`uni-popup`组件 3. 安卓端按钮颜色无法自定义时可添加条件编译: ```javascript // #ifdef MP-WEIXIN confirmColor: '#2979FF', // #endif ``` 建议根据实际项目需求选择方案,若需保持多平台样式统一,推荐使用`uni-popup`组件进行深度定制。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值