1 新建uni-app项目——通讯录

HBuilder 选择文件,新建(如果提示需要安装插件,按照提示安装即可,稍后会要求登陆,如果没有HBuilder账户,可以根据提示去注册):

image-20210723150057300

2 创建云服务空间并关联项目

uniCloud 目录上单击右键,选择打开 uniCloud Web 控制台,根据提示创建云服务空间:

image-20210723150241790

uniCloud 目录上单击右键,选择 关联云服务空间或项目,选择刚刚创建好的云服务空间:

image-20210723150453854

3 创建数据表

在Web控制台的云数据库下点击创建数据表

image-20210723150749770

点击表结构,编辑 read 属性值为 true

image-20210723150946596

4 录入数据

点击 添加记录

image-20210723151345693

添加记录后的数据列表:

image-20210723151613854

5 前端创建组件,读取数据表

pages 目录上单击右键,点击新建页面,新建 list 页面:

image-20210723151857950

点击预览,运行当前项目,然后修改 list.vue 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<template>
<view>
<unicloud-db v-slot:default="{data, loading, error, options}" collection="contacts">
<view v-if="error">{{error.message}}</view>
<view v-else>
{{data}}
</view>
</unicloud-db>
</view>
</template>

<script>
export default {
data() {
return {

}
},
methods: {

}
}
</script>

<style>

</style>

运行出现如下错误:

QQ图片20210723153401

database 目录上单击右键,点击下载所有DB schema及扩展校验函数,刷新后即可看到查询到的数据:

image-20210723153725630

DCloud 插件市场中搜索 uni-ui ,点击使用HBuilderX 导入插件

image-20210723154745197

image-20210723154926104

修改 list.vue 如下,实现通讯录列表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<template>
<view>
<unicloud-db v-slot:default="{data, loading, error, options}" collection="contacts">
<view v-if="error">{{error.message}}</view>
<view v-else>
<uni-list>
<uni-list-item v-for="item in data" :key="item._id" :title="item.name" :note="item.phone" link></uni-list-item>
</uni-list>
</view>
</unicloud-db>
</view>
</template>

<script>
export default {
data() {
return {

}
},
methods: {

}
}
</script>

<style>

</style>

点击预览,出现scss/sass编译插件未安装的错误,按照提示去安装即可:

image-20210723155633815

修改 list.vue 如下,实现长按删除记录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<template>
<view>
<unicloud-db ref="udb" v-slot:default="{data, loading, error, options}" collection="contacts">
<view v-if="error">{{error.message}}</view>
<view v-else>
<uni-list>
<uni-list-item v-for="item in data" @longpress.native="rmItem(item._id)" :key="item._id" :title="item.name" :note="item.phone" link></uni-list-item>
</uni-list>
</view>
</unicloud-db>
</view>
</template>

<script>
export default {
data() {
return {

}
},
methods: {
rmItem(id) {
this.$refs.udb.remove(id)
}
}
}
</script>

<style>

</style>

长按后效果如下:

image-20210723160718919

点击确定会提示权限校验未通过:

image-20210723160753134

可以修改 database/contacts.schema.json 文件的 delete 字段值为 true,然后在 contacts.schema.json 上单击右键,点击上传DB Schema,然后再点击确定就可以删除,删除后如下所示:

image-20210723161036613

pages 目录上单击右键,点击新建页面,新建 add 页面,修改 add.vue 如下,实现新增记录功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<template>
<view>
<uni-easyinput v-model="item.name" placeholder="姓名" />
<uni-easyinput v-model="item.phone" placeholder="电话" />
<button type="default" @click="submit">提交</button>
</view>
</template>

<script>
export default {
data() {
return {
item:{
"name":"",
"phone":""
}
}
},
methods: {
submit() {
const db = uniCloud.database();
db.collection('contacts').add(this.item).then(e=>{
console.log(e)
})
}
}
}
</script>

<style>

</style>

运行效果如下:

image-20210723163530115

出现权限校验未通过,只需修改 database/contacts.schema.json 文件的 create 字段值为 true,然后在 contacts.schema.json 上单击右键,点击上传DB Schema,然后再点击确定就可以添加,添加后出现错误:数据库验证失败:提交的字段["name","phone"]在本地数据表的schema文件中不存在”。

修改 database/contacts.schema.json 文件如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"bsonType": "object",
"required": [],
"permission": {
"read": true,
"create": true,
"update": false,
"delete": true
},
"properties": {
"_id": {
"description": "ID,系统自动生成"
},
"name":{},
"phone":{}
}
}

然后在 contacts.schema.json 上单击右键,点击上传DB Schema,再次提交后效果如下所示:

image-20210723164158113

回到列表页,发现已经添加成功了:

image-20210723164248820

pages 目录上单击右键,点击新建页面,新建 update 页面,修改 update.vue 如下,实现更新记录功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<template>
<view>
<uni-easyinput v-model="item.name" placeholder="姓名" />
<uni-easyinput v-model="item.phone" placeholder="电话" />
<button type="default" @click="submit">更新</button>
</view>
</template>

<script>
export default {
data() {
return {
item:{
"_id":"",
"name":"",
"phone":""
}
}
},
onLoad({item}) {
this.item = JSON.parse(item)
},
methods: {
submit() {
const db = uniCloud.database();
let item = {...this.item}
delete item._id
db.collection('contacts').doc(this.item._id).update(item).then(e=>{
console.log(e)
})
}
}
}
</script>

<style>

</style>

修改 list.vue 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<template>
<view>
<unicloud-db ref="udb" v-slot:default="{data, loading, error, options}" collection="contacts">
<view v-if="error">{{error.message}}</view>
<view v-else>
<uni-list>
<uni-list-item v-for="item in data" @click.native="updateFn(item)" @longpress.native="rmItem(item._id)" :key="item._id" :title="item.name" :note="item.phone" link></uni-list-item>
</uni-list>
</view>
</unicloud-db>
</view>
</template>

<script>
export default {
data() {
return {

}
},
methods: {
updateFn(item){
uni.navigateTo({
url: '../update/update?item='+JSON.stringify(item),
success: res => {},
fail: () => {},
complete: () => {}
})
},
rmItem(id) {
this.$refs.udb.remove(id)
}
}
}
</script>

<style>

</style>

修改 database/contacts.schema.json 文件如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"bsonType": "object",
"required": [],
"permission": {
"read": true,
"create": true,
"update": true,
"delete": true
},
"properties": {
"_id": {
"description": "ID,系统自动生成"
},
"name":{},
"phone":{}
}
}

然后在 contacts.schema.json 上单击右键,点击上传DB Schema,预览运行后,在list页面单击联系人即可进入修改页面:

image-20210723170745238

点击更新后,回到list页面刷新后:

image-20210723170827335