Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MuGuiLin
uni-app
提交
a540c221
U
uni-app
项目概览
MuGuiLin
/
uni-app
与 Fork 源项目一致
Fork自
DCloud / uni-app
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a540c221
编写于
10月 20, 2020
作者:
d-u-a
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: schema clientdb-component
上级
f917f926
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
97 addition
and
39 deletion
+97
-39
docs/uniCloud/schema.md
docs/uniCloud/schema.md
+54
-12
docs/uniCloud/uni-clientdb-component.md
docs/uniCloud/uni-clientdb-component.md
+43
-27
未找到文件。
docs/uniCloud/schema.md
浏览文件 @
a540c221
...
...
@@ -20,15 +20,11 @@ DB Schema是一种基于 JSON 格式定义的数据结构的规范。
编写好schema后,您可以进一步导出表单校验规则。方法如下:
1.
点击 “导出表单校验规则”,在左侧选择要校验的字段,然后点击“下载zip”按钮,将导出一个工程源码压缩包,其中
含有clientDB、uni-id等库,最重要的是cloudfunctions目录下uni-clientDB
/validator/下的js文件。该文件包含了根据schema生成的校验规则。
1.
点击 “导出表单校验规则”,在左侧选择要校验的字段,然后点击“下载zip”按钮,将导出一个工程源码压缩包,其中
js_sdk目录下validator
/validator/下的js文件。该文件包含了根据schema生成的校验规则。
!
[](
https://vkceyugu.cdn.bspapp.com/VKCEYUGU-uni-app-doc/38cdc790-ff2e-11ea-9dfb-6da8e309e0d8.png
)
2.
解压导出的zip包,拷贝到已有工程(以后会支持直接导入到HBuilderX)
-
如果你的项目下还没有clientDB,可以把整个zip解压到工程下,然后上传云函数到服务空间。
-
如果你的项目下已经有clientDB,且版本大于等于2.0,只需要把zip里的cloudfunctions目录下
`uni-clientDB/validator/`
下的js文件copy到工程的对应目录下即可。
-
如果你已经自行编写过
`db-permission`
文件,注意不要把
`db-permission`
也覆盖了,如果您未编写过
`db-permission`
,可以覆盖过去,并打开该文件根据自己的需求进行修改。
clientDB的工程目录结构见:
[
详情
](
https://uniapp.dcloud.net.cn/uniCloud/uni-clientDB?id=structure
)
注意数据校验,只有使用clientDB 2.0+,才有效。不用clientDB,在云函数中直接操作数据库无法使用该校验规则。
#### Schema字段
...
...
@@ -48,7 +44,8 @@ clientDB的工程目录结构见:[详情](https://uniapp.dcloud.net.cn/uniClou
|description|string|描述,开发者维护时自用|
|format|'url'
|
'email'|数据格式|
|pattern|String|正则表达式,如设置为手机号的正则表达式后,不符合该正则表达式则校验失败|
|db-permission|Object|数据库权限,参考:
[
https://uniapp.dcloud.net.cn/uniCloud/uni-clientDB?id=db-permission
](
https://uniapp.dcloud.net.cn/uniCloud/uni-clientDB?id=db-permission
)
|
|validateFunction|string|扩展校验函数名|
|permission|Object|数据库权限,参考:
[
https://uniapp.dcloud.net.cn/uniCloud/uni-clientDB?id=db-permission
](
https://uniapp.dcloud.net.cn/uniCloud/uni-clientDB?id=db-permission
)
|
|label|string|字段标题。用于生成数据维护ui界面时,渲染表单项前面的label标题|
|defaultValue|string
|
Object|默认值|
|forceDefaultValue|string
|
Object|强制默认值,不可通过clientDB的代码修改,常用于存放用户id、时间、客户端ip等固定值。具体参考下表的defaultValue|
...
...
@@ -59,7 +56,7 @@ clientDB的工程目录结构见:[详情](https://uniapp.dcloud.net.cn/uniClou
**注意:**
1.
数据校验,只有使用clientDB 2.0+,才有效。不用clientDB,在云函数中直接操作数据库无法使用该校验规则
2.
字段属性
`
db-
permission`
, 仅支持 ".read", ".write"
2.
字段属性
`permission`
, 仅支持 ".read", ".write"
3.
生成数据维护ui页面,该功能暂未开放。
### bsonType可用类型
...
...
@@ -124,7 +121,7 @@ clientDB的工程目录结构见:[详情](https://uniapp.dcloud.net.cn/uniClou
```
###
db-
permission属性
### permission属性
数据库权限示例
...
...
@@ -132,7 +129,7 @@ clientDB的工程目录结构见:[详情](https://uniapp.dcloud.net.cn/uniClou
{
"bsonType"
:
"object"
,
"required"
:
[],
"
db-
permission"
:
{
"permission"
:
{
".read"
:
true
,
//
任何用户都可以读
".create"
:
false
,
//
禁止新增数据记录(admin权限用户不受限)
".update"
:
false
,
//
禁止更新数据(admin权限用户不受限)
...
...
@@ -143,7 +140,7 @@ clientDB的工程目录结构见:[详情](https://uniapp.dcloud.net.cn/uniClou
"name"
:
{
"bsonType"
:
"string"
,
"label"
:
"姓名"
,
"
db-
permission"
:
{
"permission"
:
{
".read"
:
false
,
//
禁止读取
name
字段的数据(admin权限用户不受限)
".write"
:
false
//
禁止写入
name
字段的数据(admin权限用户不受限)
}
...
...
@@ -328,6 +325,51 @@ clientDB的工程目录结构见:[详情](https://uniapp.dcloud.net.cn/uniClou
```
### validateFunction属性@validateFunction
扩展校验函数
如何使用
1.
uniCloud 控制台,选择服务空间,切换到数据表
2.
底部 “扩展校验函数” 点击 “+” 增加校验函数 !
[](
https://vkceyugu.cdn.bspapp.com/VKCEYUGU-uni-app-doc/2f4d0230-12a2-11eb-b244-a9f5e5565f30.png
)
```
// 扩展校验函数示例
exports = function (rule, value, data) {
// rule 当前规则
// value 当前规则校验数据
// data 全部校验数据
return value.length < 10
}
```
3.
在表结构 schema 编辑页面中配置需要校验的函数名称
```
json
{
"bsonType"
:
"object"
,
"required"
:
[
"name"
],
"properties"
:
{
"name"
:
{
"bsonType"
:
"string"
,
"label"
:
"姓名"
,
"validateFunction"
:
"name"
,
"errorMessage"
:
{
"required"
:
"{label}不能为空"
,
"pattern"
:
"{label}格式无效"
}
}
}
}
```
4.
保存后生效
### errorMessage属性
clientDB的validator校验库,会根据schema配置的规范进行校验。数据不符合要求时,无法入库,此时会根据errorMessage的定义报出错误提示。
...
...
@@ -399,7 +441,7 @@ errorMessage支持字符串,也支持json object。类型为object时,可定
{
"bsonType"
:
"object"
,
"required"
:
[
"name"
,
"nickname"
],
"
db-
permission"
:
{
"permission"
:
{
".read"
:
false
,
".create"
:
false
,
".update"
:
false
,
...
...
@@ -418,7 +460,7 @@ errorMessage支持字符串,也支持json object。类型为object时,可定
"required"
:
"{label}必填"
,
"minLength"
:
"{label}不能小于{minLength}个字符"
},
"
db-
permission"
:
{
"permission"
:
{
".read"
:
false
,
".write"
:
false
},
...
...
docs/uniCloud/uni-clientdb-component.md
浏览文件 @
a540c221
...
...
@@ -26,6 +26,9 @@ HBuilderX 2.9.5+ 全端支持
|field|string|查询字段,多个字段用
`,`
分割|
|where|string|查询条件,内容较多,另见文档:
[
详情
](
https://uniapp.dcloud.net.cn/uniCloud/uni-clientDB?id=jsquery
)
|
|orderby|string|排序字段及正序倒叙设置|
|page-current|Number|当前页|
|page-size|Number|每页数据数量|
|need-total|Number|分页模式,默认
`false`
,需要分页模式时指定为
`true`
|
|getone|Boolean|指定查询结果是否返回数组第一条数据,默认 false。在false情况下返回的是数组,即便只有一条结果,也需要[0]的方式获取。在true下,直接返回结果数据,少一层数组。应用场景:详情页|
|action|string|云端执行数据库查询的前或后,触发某个action函数操作,进行预处理或后处理,
[
详情
](
https://uniapp.dcloud.net.cn/uniCloud/uni-clientDB?id=%e4%ba%91%e7%ab%af%e9%83%a8%e5%88%86
)
。场景:前端无权操作的数据,比如阅读数+1|
|manual|Boolean|是否手动加载数据,默认为 false,页面onready时自动联网加载数据。如果设为 true,则需要自行指定时机通过方法
`this.$refs.udb.loadData()`
来触发联网,其中的
`udb`
指组件的ref值|
...
...
@@ -63,16 +66,6 @@ HBuilderX 2.9.5+ 全端支持
```
#### pagination属性
|属性|类型|描述|
|:-|:-|:-|
|current|Number|当前页|
|size|Number|每页多少条数据|
|total|Boolean|分页模式,默认 `
false
`,需要分页模式时指定为 `
true
`|
#### 事件
load事件在查询执行后、渲染前触发,一般用于查询数据的二次加工。比如查库结果不能直接渲染时,可以在load事件里先对data进行预处理。
...
...
@@ -120,7 +113,7 @@ this.$refs.udb.loadMore() //udb为uni-clientdb组件的ref属性值
```html
<template>
<view>
<uni-clientdb v-slot:default="{data,
pagination,
loading, error, options}" collection="user" field="name" :getone="true" where="id=='1'">
<uni-clientdb v-slot:default="{data, loading, error, options}" collection="user" field="name" :getone="true" where="id=='1'">
<view>
{{ data.name}}
</view>
...
...
@@ -145,8 +138,7 @@ this.$refs.udb.loadMore() //udb为uni-clientdb组件的ref属性值
:getone="false"
:action="action"
:where="where"
:pagination="pagination" @load="onqueryload" @error="onqueryerror">
<view>{{pagination}}</view>
@load="onqueryload" @error="onqueryerror">
<view v-if="error" class="error">{{error.errMsg}}</view>
<view v-else class="list">
<view v-for="(item, index) in data" :key="index" class="list-item">
...
...
@@ -240,12 +232,10 @@ this.$refs.udb.loadMore() //udb为uni-clientdb组件的ref属性值
<view class="content">
<uni-clientdb ref="udb" v-slot:default="{data, pagination, loading, error, options}"
:options="options"
collection="
table1
"
collection="
unicloud-test
"
orderby="createTime desc"
field="name,subType,createTime"
:getone="false"
:action="action"
:pagination="pagination" @load="onqueryload" @error="onqueryerror">
@load="onqueryload" @error="onqueryerror">
<view>{{pagination}}</view>
<view v-if="error" class="error">{{error.errMsg}}</view>
<view v-else class="list">
...
...
@@ -255,7 +245,7 @@ this.$refs.udb.loadMore() //udb为uni-clientdb组件的ref属性值
</view>
<view class="loading" v-if="loading">加载中...</view>
<!-- 分页组件 -->
<uni-pagination show-icon :page-size="pagination.size"
v-model="options.current"
total="pagination.total" @change="onpagination" />
<uni-pagination show-icon :page-size="pagination.size" total="pagination.total" @change="onpagination" />
</uni-clientdb>
</view>
</template>
...
...
@@ -265,13 +255,6 @@ this.$refs.udb.loadMore() //udb为uni-clientdb组件的ref属性值
data() {
return {
options: {}, // 插槽不能访问外面的数据,通过此参数传递, 不支持传递函数
pagination: {
current: 1,
size: 20,
total: true
},
action: '',
where: {} // 类型为对象或字符串
}
},
onPullDownRefresh() {
...
...
@@ -286,7 +269,7 @@ this.$refs.udb.loadMore() //udb为uni-clientdb组件的ref属性值
data.forEach((item) => {
item.createTime = new Date(item.createTime).toLocaleString()
})
// 上述时间格式化仅为演示,实际开发中推荐在组件里直接使用`<uni-data
format>`组件,不用在load事件中通过js格式化数据
// 上述时间格式化仅为演示,实际开发中推荐在组件里直接使用`<uni-date
format>`组件,不用在load事件中通过js格式化数据
if (ended) {
// 没有更多数据了
}
...
...
@@ -329,10 +312,43 @@ this.$refs.udb.loadMore() //udb为uni-clientdb组件的ref属性值
```
组件嵌套示例,访问父组件 data
```
<uni-clientdb ref="dataQuery" v-slot:default="{data, pagination, loading, error, options}" :options="options" collection="unicloud-test"
orderby="createTime desc" field="name,createTime"
:where="where" @load="onqueryload" @error="onqueryerror">
<view>{{pagination}}</view>
<view v-if="error" class="error">{{error.errMsg}}</view>
<view v-else class="list">
<view v-for="(item, index) in data" :key="index" class="list-item">
{{ item.name }}
{{ item.createTime }}
</view>
</view>
<view class="loading" v-if="loading">加载中...</view>
<!-- 嵌套测试 -->
<!-- :options="data",将 父组件返回的 data 通过 options 传递到组件,子组件通过 options 访问 -->
<uni-clientdb ref="dataQuery1" v-slot:default="{loading, data, error, options}" :options="data" collection="unicloud-test"
orderby="createTime desc" field="name,createTime" @load="onqueryload" @error="onqueryerror">
<view v-if="options" class="error">{{options}}</view>
<view v-if="error" class="error">{{error.errMsg}}</view>
<view v-else class="list">
<view v-for="(item, index) in data" :key="index" class="list-item">
{{ item.name }}
</view>
</view>
</uni-clientdb>
</uni-clientdb>
```
**调试小技巧**
- H5平台,开发模式下浏览器控制台输入 `
unidev.clientDB.data
`,可查看组件内部数据,多个组件通过索引查看 `
unidev.clientDB.data[0]
`
**Tips**
- 时间显示,推荐使用`
<uni-dat
a-
format>
`
组件,可以避免在 load 事件中写代码对时间进行格式处理。
- 时间显示,推荐使用`
<uni-dat
e
format>
`
组件,可以避免在 load 事件中写代码对时间进行格式处理。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录