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


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 相关文章推荐
基于jquery的实现简单的表格中增加或删除下一行
Aug 01 Javascript
用Jquery实现多级下拉框无刷新的联动
Dec 22 Javascript
js加入收藏夹代码(兼容ie/ff/op)
May 16 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
Oct 19 Javascript
浅谈js中变量初始化
Feb 03 Javascript
js获取当前日期前七天的方法
Feb 28 Javascript
jQuery插件zepto.js简单实现tab切换
Jun 16 Javascript
jquery div模态窗口的简单实例
May 28 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
Sep 14 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
Sep 27 Javascript
JavaScript 正则命名分组【推荐】
Jun 07 Javascript
百度小程序之间的页面通信过程详解
Jul 18 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
Laravel 5 框架入门(二)构建 Pages 的管理功能
2015/04/09 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
Dom在ajax技术中的作用说明
2010/10/25 Javascript
javascript如何判断输入的url是否正确
2014/04/11 Javascript
两种不同的方法实现js对checkbox进行全选和反选
2014/05/13 Javascript
js性能优化技巧
2015/11/29 Javascript
JS获取多维数组中相同键的值实现方法示例
2017/01/06 Javascript
基于JavaScript实现带缩略图的轮播效果
2017/01/12 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
一个可复用的vue分页组件
2017/05/15 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
基于datepicker定义自己的angular时间组件的示例
2018/03/14 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
详解windows python3.7安装numpy问题的解决方法
2018/08/13 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
英国设计师珠宝网站:Joshua James Jewellery
2020/03/01 全球购物
密封类可以有虚函数吗
2014/08/11 面试题
白酒业务员岗位职责
2013/12/27 职场文书
模具设计与制造专业推荐信
2014/02/16 职场文书
小学端午节活动方案
2014/03/13 职场文书
《春雨》教学反思
2014/04/24 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
还款承诺书范本
2015/01/20 职场文书
2015年双拥工作总结
2015/04/08 职场文书
2016年元旦致辞
2015/08/01 职场文书