微信号: aotoodemo
小程序端更名为queryUI
,在微信中搜索queryUI
可以查看DEMO
该项目是一个精简小程序项目,包含小程序一些好用的UI组件及其演示demo,不定期更新,欢迎关注并在github上点赞我们
aotoo
是我们web项目(react)开发工具库,queryui
基于aotoo的开发理念,我们希望统一多端的开发**,降低成员开发成本,也便于降低后期的维护成本。
gitee(码云): https://gitee.com/webkixi/aotoo-xquery
- 原生微信小程序
- 动态模板构建
- 内置支持html、markdown
完整DEMO列表
- 多形态日历组件
- 通用型筛选列表
- form表单
- markdown/html组件
- 怎么弹都可以的弹窗组件
- 支持震动的评分组件
- 下拉菜单
- 双向slider
- 索引列表
- 腾讯地址定位
- 水果老虎机
- 折叠面板
- 双栏分类导航(左右)
- 双栏分类导航(上下)
- 刮刮卡
- 导航球
- 导航面板
- 俄罗斯大转盘
- 手势锁
-
aotoo-hub环境中可远程安装
queryui
,并使用webpack编译,支持动态样式编译,导入markdown等等这里 -
clone本项目,使用微信小程序开发工具打开
-
引入核心源码在其他项目中使用,查看下例说明
components
├─ aotoo 核心代码必须有 ✔︎
├─ actionSide 弹窗组件
├─ form 表单组件
├─ calendar 日历组件
├─ markit 文档组件
├─ modules ✔︎ # 该目录下的文件为组件合集
├─ templates 模板 ✔︎
│
css 日历、文档、表单等样式
│
pages 基础示例
│
app.json 注册全局组件
融合项目中必须引入以下核心目录、文件
components
├─ aotoo 核心代码必须有 ✔︎
├─ form 表单组件 ✔︎
├─ markit 文档组件 ✔︎
├─ modules ✔︎ # 该目录下的文件为组件合集,视需求选择
├─ templates 模板 ✔︎
在app.json中定义核心全局组件
"usingComponents": {
"ui-item": "/components/aotoo/item/index",
"ui-list": "/components/aotoo/list/index",
"ui-tree": "/components/aotoo/tree/index",
"ui-form": "/components/form/index",
"ui-markit": "/components/markit/index"
}
核心文件内置支持
- markdown(全语法)
- html
- from表单
- item
- list
- tree
- img
且支持外挂组件, 方便扩展使用
一套引入未压缩核心代码包大概为500k左右,后期考虑插件化可以大大降低小程序包容量
Demo代码中有大量Pager的相关使用,需要注意正确的使用方式
Pager是queryUI对于Page的封装方法,该方法与Page一脉相承,使用逻辑,用法均保持一致,因此你可以使用Pager代替Page使用
queryUI的组件需要在Pager的环境中才能生效
const Pager = require('../../components/aotoo/core/index')
Pager({
data: {},
onLoad(){},
onReady(){}
})
可以观察项目modules组件集合目录,该目录中存放各种组件库,可以看到组件的wxml结构非常简单,使用时模板方面的维护成本几乎为0,可以做到拿来即用 所有逻辑几乎都在JS部分完成,方便扩展、升级。
item是核心元组件,该组件支持输出非常丰富的结构, 组件结构支持递归item组件来生成复杂结构
wxml
<ui-item item="{{itemConfig}}" />
js
Pager({
data: {
// item组件的基础配置
itemConfig: {
$$id: {String} // item组件实例化后查找id
title: {String|Array|{Object}}, // 标题,标题组
img: {String|Array|Object}, // 图片,图组
itemClass: {String} // item样式
body: {Array} // body子容器,item集合
footer: {Array} // footer子容器,item集合
dot: {Array} // dot子容器,item集合
tap: {String|Function} // bind:tap方法
aim: {String|Function} // catch:tap方法
longpress: {String|Function} // bind:longpress方法
catchlongpress: {String|Function} // catch:longpress方法
}
}
})
list是核心元组件,该组件基于item元组件构建而成,适用于列表类的场景使用,项目中的各种组件几乎都是基于list组件构建
wxml
<ui-list list="{{listConfig}}" />
js
Pager({
data: {
// list组件的基础配置
listConfig: {
$$id: {String} // list组件实例化后查找id
listClass: {String} // 列表样式
itemClass: {String} // 列表项样式
header: {Object} // item配置
footer: {Object} // item配置
data: {Array} // 列表项数据配置,item集合
itemMethod: {Object} // 自动为列表项绑定方法,支持(tap, aim, longpress...)
methods: {Object} // 设置list实例对象的内部方法
}
}
})
tree是核心元组件,该组件基于list组件构建而成,在扁平化的数据结构的基础上,能够输出层次化的结构 tree元组件配置如同list元组件
wxml
<ui-tree list="{{treeConfig}}" />
js
Pager({
data: {
// list组件的基础配置
treeConfig: {
$$id: {String} // list组件实例化后查找id
listClass: {String} // 列表样式
itemClass: {String} // 列表项样式
header: {Object} // item配置
footer: {Object} // item配置
data: {Array} // 列表项数据配置,item集合
itemMethod: {Object} // 自动为列表项绑定方法,支持(tap, aim, longpress...)
methods: {Object} // 设置list实例对象的内部方法
}
}
})
内嵌组件不需要额外引入模板,直接嵌入在其他组件中使用的组件,内嵌组件基于寻址算法,会自动处理父子级的组件关系,比如子级使用父级定义的方法,或者`Page`中定义的方法 下列是常用的内嵌组件
- @item
- @list
- @tree
- @url
- @md
- @html
- @form
比如我们在item组件
中需要引入一个列表组件
wxml
<ui-item item="{{itemConfig}}" />
Pager({
data: {
itemConfig: {
title: '列表标题',
"@list": {
listClass: 'list-class-name'
data: [...]
}
}
}
})
Pager({
data: {
item: {/* item配置*/}, // $$id = 'abc'
list: {/* list配置*/} // $$id = 'xyz'
}
onReady(){
let abc = this.getElementsById('#abc')
abc.update({title: '新标题'})
let xyz = this.getEelementsById('#xyz')
xyz.forEach(item=>{
// item.addclass/removeClass/hasClass/css/update... 等类jquery的API方法
})
this.find('.class-name').addClass('other-class-name') // 批量追加类名
}
})