前言
每个人都在不断的学习,不断的进步,希望这篇文章能记录我在公司学习使用MUI的过程和坑。
mui的官方文档 https://dev.dcloud.net.cn/mui/util/
目录
- 基本工具
- 开发流程
- 怎么快速做一个简洁的列表
- input输入表单
- 消息框
- 日期选择器
- 关闭详情页面,返回时,希望刷新列表界面
- 事件绑定
- mui循环 合并对象 延迟加载
基本工具
- 开发工具 HBuilder1
- js引入文件 mui.min.js
- css引入文件 mui.min.css
开发流程
- 首先你要把相关js文件和css文件引入进来
- 然后你在新建一个js文件 里面调用
- mui.init() -官方解释 mui页面加载时需要调用很多基础控件,比如监听返回键,因此务必在每个页面中调用
- mui.plusReady() 这个是可以理解为初始化 就是页面加载的时候会触发一次 仅仅在移动端运行
- mui.ready() 这个也是初始化,不过它在PC端和移动端都能运行 建议是当你要用mui的时候 首先把这三个都加到js里去
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>MUI示例</title> <link rel="stylesheet" href="../../mui/css/mui.min.css"/> </head> <body> <script src="../../mui/js/mui.min.js"></script> <script type="text/javascript" charset="UTF-8"> mui.init(); mui.plusReady(function(){ }); mui.ready(function(){ }); </script> </body> </html>
怎么快速做一个简洁的列表
- 在父节点加.mui-table-view 子节点加.mui-table-view-cell 就可以形成要给最简单的列表
- 加.mui-navigate-right 就是在右边加一个>图标
- 如果你想在列表右边加一个删除按钮 也就是角标
- 你只要加上.mui-badge mui-badge-primary 这个就好了
- 角标的核心class是.mui-badge 后面可以加颜色
- mui内置了5种颜色
- .mui-badge-primary 蓝色
- .mui-badge-success 绿色
- .mui-badge-warning 黄色
- .mui-badge-danger 红色
- .mui-badge-purple 紫色
<ul class="mui-table-view .mui-active"> <li class="mui-table-view-cell"> <a class="mui-navigate-right">Item 2</a> </li> <li class="mui-table-view-cell">Item 2 <span class="mui-badge mui-badge-primary">11</span> </li> <li class="mui-table-view-cell">Item 3 <span class = "mui-badge mui-badge-success">删除</span> </li> </ul>
效果:

input输入表单
- 主要class只有两个
- 父节点class用.mui-input-group 表示分组的意思
- 子节点class用 .mui-input-row 表示一行的意思
- 在.mui-input-row同级上加.mui-search就可以使用搜索控件
- .mui-input-clear 表示快速删除input的内容
- .mui-input-password 表示显示或隐藏密码
<form class="mui-input-group"> <div class="mui-input-row mui-search"> <input type="search" class="mui-input-clear" placeholder=""> </div> <div class="mui-input-row"> <label>用户名:</label> <input type="text" class="mui-input-clear" placeholder="请输入用户名"> </div> <div class="mui-input-row"> <label>密码:</label> <input type="password" class="mui-input-password" placeholder="请输入密码"> </div> </form>
效果:

消息框
- .confirm(message,title,btnValue,callback[,type])
- message显示的是消息 如 “该记录还没保存,是否保存?”
- title 显示的标题
- btnValue 是一个数组 主要是显示按钮上的提示 是or否
- callback 提示对话框上关闭后的回调函数
- type 是否使用h5绘制的对话框 一般用 ‘div’ 也可以不写
var btnArray = ['是', '否']; mui.confirm('该记录还没保存,是否保存?', '提示', btnArray, function(e) { if (e.index == 0) { //如果点是执行这个逻辑 否则会自动关闭确认框 } });
效果:

日期选择器
-
- 首先想用mui的日期选择器 你必须加上
- mui.picker.min.css
- mui.picker.min.js
- 首先想用mui的日期选择器 你必须加上
- 如下代码讲解
- 首先创建一个日期控件new mui.DtPicker
- 给里面的type赋值
- datetime 显示年月日时分
- date 显示年月日
- time 显示时分
- month 显示年月
- hour 显示年月日时
-
- 给日期input设置一个id
- js后面监听这个id点击事件
- 当日期被点击的是时候 显示show日期控件
- 把选择的值放入到input中
<form class="mui-input-group"> <div class="mui-input-row" > <label>入库日期 <span style="color:red">*</span></label> <input id="in_date" type="text" class="" placeholder="日期"/> </div> </form> mui.init(); mui.plusReady(function(){ }); mui.ready(function(){ var dtPicker = new mui.DtPicker({ type:'datetime' }); // 监听日期选择点击事件 tap在mui是点击事件 document.getElementById("in_date").addEventListener('tap', function() { dtPicker.show(function (selectItems) { //把选中的值放入到input日期里 this.value=selectItems.value; }); } }); });
效果:

关闭详情页面,返回时,希望刷新列表界面
-
- 触发mui.back()页面关闭事件的三种方式
- 点击包含class带有.mui-action-back的标签
- 下方代码 会自动生成带有返回导航箭头的标题栏,点击返回箭头可关闭当前页面,原因就是因为该a标签class里包含.mui-action-back
- 点击包含class带有.mui-action-back的标签
- 触发mui.back()页面关闭事件的三种方式
-
- Android手机按下back按键
- Android back按键返回功能默认开启,如果想禁用 则须 backbutton: false
- Android手机按下back按键
-
-
- 在屏幕内,向右快速滑动
- mui框架的右滑关闭功能,默认是关闭的,可以手动启动 swipeBack:true
- 注意ios是原生支持右滑关闭的 如果要禁用,需要设置popGesture:none
- 在屏幕内,向右快速滑动
-
- beforeback参数可以让你在页面关闭之前在处理一些业务逻辑
- 比如获取列表的界面 然后触发列表界面的刷新事件 就行了
- 如果你获取不到列表界面 你可以尝试一下预加载界面preloadPages 亲测可用
//详情页js mui.init({ preloadPages:[{ id:'store-in-list.html',//列表界面id 自己填写 url:'store-in-list.html' //列表界面url 根据自己的相对路径填写 如果在上级目录就../store-in-list.html } ], beforeback: function(){ //获得列表界面的webview var list = plus.webview.getWebviewById('list'); //触发列表界面的自定义事件(refresh),从而进行数据刷新 mui.fire(list,'refresh'); //返回true,继续页面关闭逻辑 return true; }, swipeBack:true, //启用右滑关闭功能 keyEventBind: { backbutton: false //关闭back按键监听 } }); //详情页标题头html <header class="mui-bar mui-bar-nav"> <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a> <h1 class="mui-title">标题</h1> </header> //列表界面js window.addEventListener('refresh', function(event){ //我要刷新列表 loadList();//向后台发送查询数据的方法 });
事件绑定
- 拆分讲解
- mui(‘.mui-indexed-list ul’) 这就是一个对象集合意思是查询.mui-indexed-list下所有的ul
- tap 就是事件名 点击的意思 如果你想事件改变的时候触发你就改成 change 就好了
- li 就是要监控的标签 li 其实就在.mui-indexed-list ul下面 一个是父类 一个是子类
- function() 就是回调函数 当li被点击后要执行的逻辑
//点击入库列表查看入库信息 mui('.mui-indexed-list ul').on('tap', 'li', function(){ }); //当事件改变的时候触发 mui('.mui-indexed-list ul').on('change', 'li', function(){ });
mui循环 合并对象 延迟加载
- each循环
- array 就是要循环的对象 可以是数组 也可以是json对象
- index 就是下标
- item 就是循环获取的值
var array = [1,2,3] mui.each(array,function(index,item){ console.log(item*item); })
- extend合并对象
- deep 递归合并 若为true则递归合并
- target 目标对象
- obj1 需要合并的对象 如果合并的不止两个 可以在后面继续加对象 mui.extend(true,target,obj1,obj2,…);
var target = { company:"dcloud", product:{ mui:"小巧、高效" } } var obj1 = { city:"beijing", product:{ HBuilder:"飞一样的编码" } } //支持深度合并 mui.extend(true,target,obj1); //输出:{"company":"dcloud","product":{"mui":"小巧、高效","HBuilder":"飞一样的编码"},"city":"beijing"} console.log(JSON.stringify(target));
- later延迟加载
- function() 就是回调函数
- 300 就是延迟的毫秒数
- 我是用在当你打开页面默认异步加载下拉框列表时 那时候你也要默认加载数据 这个时候你会发现 你加载数据的时候 下拉框还没又加载好 就会导致数据不对 这个你如果用延迟加载 等待下拉框加载完 你在加载下拉框的值 就对了
mui.later(function(){ console.log("我延迟加载啦!!!"); },300);
转自:https://zhuanlan.zhihu.com/p/361878292