详解钉钉小程序组件之自定义模态框(弹窗封装实现)


Posted in Javascript onMarch 07, 2020

背景

开发钉钉小程序中需要用到模态框 文档里也没有 自己搞一个…
效果大概长这个样

点击指定按钮,弹出模态框,里面的内容可以自定义,可以是简单的文字提示,也可以输入框等复杂布局。操作完点击取消或确定关闭。

开始封装

上图所示文件内容放入项目即可 (路径自己高兴着来)

modal.js
内容不多 但都是精华

/**
 * 自定义modal浮层
 * 使用方法:
 * <modal show="{{showModal}}" height='80%' onCancel="modalCancel" onSubmit='modalSubmit'>
 <view>你自己需要展示的内容</view>
 </modal>
 
 属性说明:
 show: 控制modal显示与隐藏
 height:modal的高度
 onCancel:点击取消按钮的回调函数
 onSubmit:点击确定按钮的回调函数
 
 */
 
 Component({
 
 /**
 * 组件的属性列表
 */
 props: {
 // modal的默认高度
 height: '60%',
 
 //是否显示modal
 show: false,
 
 // submit()
 onSubmit:(data) => console.log(data),
 
 // onCancel()
 onCancel:(data) => console.log(data),
 },
 
 /**
 * 组件的初始数据
 */
 data: {
 
 },
 
 /**
 * 组件的方法列表
 */
 methods: {
 clickMask() {
 // this.setData({show: false})
 },
 
 cancel(e) {
 // this.setData({ show: false });
 this.props.onCancel(e);
 },
 
 submit(e) {
 // this.setData({ show: false });
 this.props.onSubmit(e);
 }
 }
 })

代码使用 props 属性设置属性默认值, 调用的时候传递指定值即可

modal.json
这就是个申明 啥也不是

{
 "component": true,
 "usingComponents": {}
 }

开发者需要在 .json 文件中指明自定义组件的依赖

modal.acss
这玩意我一个写后端的调了半天才勉强看得下去 求大佬改版发我

.mask{
 position: absolute;
 top: 0;
 bottom: 0;
 width: 100%;
 height: 100%;
 display: flex;
 justify-content: center;
 align-items: center;
 background-color: rgba(0,0,0,0.4);
 z-index: 9999;
}

.modal-content{
 flex-direction: column;
 width: 90%;
 /* height: 80%; */
 position: fixed;
 top: 10%;
 left: 5%;
 background-color: #fff;
 border-radius: 10rpx;
}

.modal-btn-wrapper{
 display: flex;
 flex-direction: row;
 height: 100rpx;
 line-height: 100rpx;
 background-color: #fff;
 border-radius: 10rpx;
 border-top: 2rpx solid rgba(7,17,27,0.1);
}

.cancel-btn, .confirm-btn{
 flex: 1;
 height: 100rpx;
 line-height: 100rpx;
 text-align: center;
 font-size: 32rpx;
}

.cancel-btn{
 border-right: 2rpx solid rgba(7,17,27,0.1);
}

.main-content{
 flex: 1;
 height: 100%;
 overflow-y: hidden; 
}

modal.axml
敲重点 slot 标签

可以将 slot 理解为槽位,default slot就是默认槽位,如果调用者在组件标签之间不传递 axml,则最终会将默认槽位渲染出来。而如果调用者在组件标签之间传递有 axml,则使用其替代默认槽位,进而组装出最终的 axml 以供渲染。

简而言之 你在调用的时候所编辑的axml都被塞进slot里面了

<view class='mask' a:if='{{show}}' onTap='clickMask'>
 <view class='modal-content' style='height:{{height}}'>
 <scroll-view scroll-y class='main-content'>
 <slot></slot>
 </scroll-view>
 <view class='modal-btn-wrapper'>
 <view class='cancel-btn' style='color:rgba(7,17,27,0.6)' onTap='cancel'>取消</view>
 <view class='confirm-btn' style='color:#13b5f5' onTap='submit'>确定</view>
 </view>
 </view>
</view>

使用
这个相对简单鸟

page/xx/page.json
首先申明我要调用这个组件 标签名我就叫modal 路径自己别搞错就好

{
 "usingComponents": {
 "modal": "/page/components/modal/modal"
 }
}

page/xx/page.axml
就是这样 喵~

<modal show="{{showSearchModal}}" height='80%' onCancel="searchModalCancel" onSubmit='searchModalSubmit'>
 <view>你自己的布局</view>
</modal>

page/xx/page.js
这个你就写你自己的逻辑就没毛病了

let app = getApp();
Page({
 data: {
 showSearchModal: false,
 },
 
 onLoad() {
 },

 searchModalCancel(){
 this.setData({
 showSearchModal: false,
 });
 dd.alert({
 title: '提示',
 content: '用户点击了取消',
 });
 },

 searchModalSubmit(){
 this.setData({
 showSearchModal: false,
 });
 dd.alert({
 title: '提示',
 content: '用户点击了提交',
 buttonText: '我知道了',
 });
 },
});

小结
激动的心,颤抖的手。。。
总之先阅读官方文档
钉钉开放平台 => 前端API => 小程序 => 框架 => 自定义组件
https://ding-doc.dingtalk.com/doc#/dev/develop-custom-component

本案例相对简单,业务复杂的需求看看文档基本都能实现。

关于微信小程序实现自定义modal弹窗封装的方法 ,可以点击查看。

总结

到此这篇关于钉钉小程序组件之自定义模态框(弹窗封装实现)的文章就介绍到这了,更多相关小程序组件自定义模态框内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
Jun 28 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
Jul 02 Javascript
老生常谈js动态添加事件--- 事件委托
Jul 19 Javascript
angularJS 如何读写缓冲的方法(推荐)
Aug 06 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
Jan 18 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
Apr 25 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
Aug 14 Javascript
vue.js2.0点击获取自己的属性和jquery方法
Feb 23 jQuery
微信小程序页面间值传递的两种方法
Nov 26 Javascript
微信小程序实现评论功能
Nov 28 Javascript
Vue组件间通信 Vuex的用法解析
Aug 05 Javascript
JavaScript中的this/call/apply/bind的使用及区别
Mar 06 Javascript
Vue实现手机扫描二维码预览页面效果
May 28 #Javascript
微信小程序点击按钮动态切换input的disabled禁用/启用状态功能
Mar 07 #Javascript
微信小程序实现比较功能的方法汇总(五种方法)
Mar 07 #Javascript
微信小程序实现下滑到底部自动翻页功能
Mar 07 #Javascript
js实现选项卡效果
Mar 07 #Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
Mar 07 #Javascript
js实现简单放大镜效果
Mar 07 #Javascript
You might like
php中函数的形参与实参的问题说明
2010/09/01 PHP
thinkphp获取栏目和文章当前位置的方法
2014/10/29 PHP
PHP输入输出流学习笔记
2015/05/12 PHP
PHP和C#可共用的可逆加密算法详解
2015/10/26 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
javascript forEach通用循环遍历方法
2010/10/11 Javascript
jQuery filter函数使用方法
2014/05/19 Javascript
jQuery操作cookie方法实例教程
2014/11/25 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
bootstrap paginator分页前后台用法示例
2017/06/17 Javascript
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
JavaScript常用工具函数库汇总
2020/09/17 Javascript
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
python中pickle模块浅析
2020/12/29 Python
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
Hoover胡佛官网:美国吸尘器和洗地机品牌
2019/01/09 全球购物
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
农业资源与环境专业自荐信范文
2013/12/30 职场文书
中医临床专业自我鉴定范文
2014/01/15 职场文书
动员大会主持词
2014/03/20 职场文书
消防志愿者活动方案
2014/08/23 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
临时用工协议书范本
2014/10/29 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
小学教师个人工作总结2015
2015/04/20 职场文书
军训通讯稿范文
2015/07/18 职场文书
springboot+VUE实现登录注册
2021/05/27 Vue.js