手把手云开发小程序-(四)-uniclould增删改查业务开发

一,导入uView

在开发小程序的时候,我习惯使用uView这个ui库。主要是直接用当然比自己写省时间。

它的官网:uView - 多平台快速开发的UI框架 - uni-app UI框架 (gitee.io)

导入:

npm install uview-ui@2.0.31

然后按照官网进行配置:

1. 引入uView主JS库

在项目根目录中的main.js中,引入并使用uView的JS库,注意这两行要放在import Vue之后。

// main.js
import uView from "uview-ui";
Vue.use(uView);
2. 在引入uView的全局SCSS主题文件

在项目根目录的uni.scss中引入此文件。

/* uni.scss */
@import 'uview-ui/theme.scss';
3. 引入uView基础样式

注意!

在App.vue中首行的位置引入,注意给style标签加入lang="scss"属性
<style lang="scss">/* 注意要写在第一行,同时给style标签加入lang="scss"属性 */@import "uview-ui/index.scss";
</style>
4. 配置easycom组件模式

easycom功能可以让用户无需安装、引用、注册,三个步骤后才能使用组。uni-app为了调试性能的原因,修改easycom规则不会实时生效,配置完后,需要重启HX或者重新编译项目才能正常使用uView的功能。

// pages.json
{"easycom": {"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"},// 此为本身已有的内容"pages": [// ......]
}

二,使用unicluld完成增删改查的业务功能

页面开发就不说了,无非就是html+css,这里主要讲讲如何使用uniclould进行增删改查.

为了简化篇幅,我拿我小程序的标签来做讲解,增删改查各讲一个例子,通过这四个例子,大家也能很快学会uniclould的云对象使用,其他业务开发大差不差的.

2.1,新建标签数据表

第一步肯定是需要在云服务器新建数据表,如下图所示,新建一个即可:

2-1.png

啥也不用选,初始空表就行,就取名为tabsTable.

2.2,增加标签

新建完数据表,就需要往数据库中新增标签.

于是先画好前端ui,然后新建云对象tab:

2-2.png

前端调用接口:

async addTabs(){let num=Number(this.tabsNum)if(!num ||typeof num != 'number'){uni.showToast({title: "请输入有效值",icon:'error',duration: 1500});return }const tabs = uniCloud.importObject('tab') // 导入云对象const res2 = await tabs.addTabs({token:this.token,tabsName:this.tabsName,tabsNum:num})this.tabsName=''this.tabsNum=''this.getTabs()uni.showToast({title: res2.msg,icon:'error',duration: 2000});
},

主要就是这两行代码:

  const tabs = uniCloud.importObject('tab') // 导入云对象const res2 = await tabs.addTabs({token:this.token,tabsName:this.tabsName,tabsNum:num})

不用去纠结uniCloud从哪来的,编译的时候,框架会给我们自己引入的.这里直接这么用就行了,可以暂时把它理解成一个全局的对象.只要这样引入tab云对象,就能调用该云对象的addTabs方法啦.

前端调用这个接口后,我们的后端也就是我们的tab云对象就需要去接收,它的写法如下:

// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程:https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
const db = uniCloud.database();
const userTable = db.collection('user');
const notesTable = db.collection('notes');
const tabsTable = db.collection('tabsTable');//这几个是在引入数据表,因为要对数据表做增删改查
const dbCmd = db.command
const {encrypt,decrypt} =require("common-object");
module.exports = {_before: function () { // 通用预处理器},/*** method1方法描述* @param {string} param1 参数1描述* @returns {object} 返回值描述*/async addTabs(param) {// 业务逻辑const {token,tabsName,tabsNum}=paramlet result=JSON.parse(decrypt(token))const openId=result.openid//增加标签,首先要用该账户来判断有没有同名的标签let res=await tabsTable.where({openId:dbCmd.eq(openId)}).get()let res2=res.data.filter(item=>{return item.tabsName==tabsName})if(res2.length>0){return {code:10001,msg:'该标签名已存在'}}else{//新增标签await tabsTable.add({tabsName:tabsName,openId:openId,tabsNum:tabsNum})return {code:10000,msg:'新增成功'}}}
}

这样就完成了增加标签的业务逻辑啦.

2.3,删除标签

删除标签也是类似的操作流程,先画好页面:

2-3.png

在页面调用接口:

      //删除标签deleteTabs(){const that=thisuni.showModal({title: '提示',content: '删除该标签的同时会删除该标签下的笔记,确定要继续?',success:async  function (res) {if (res.confirm) {let params={token:that.token,tabsSelect:that.deletetabsSelect}const tabs = uniCloud.importObject('tab')const res = await tabs.delTabs(params)that.deletetabsSelect=''that.getTabs()uni.showToast({//提示title:res.msg})  } else if (res.cancel) {console.log('用户点击取消');return}}});}

对应的云对象删除标签接口:

// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程:https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
const db = uniCloud.database();
const userTable = db.collection('user');
const notesTable = db.collection('notes');
const tabsTable = db.collection('tabsTable');
const dbCmd = db.command
const {encrypt,decrypt} =require("common-object");
module.exports = {_before: function () { // 通用预处理器},//删除标签async delTabs(param){const {token,tabsSelect}=paramlet result=JSON.parse(decrypt(token))const openId=result.openid//先删除该标签下的所有笔记let res = await notesTable.where({openId:dbCmd.eq(openId),tabsSelect:tabsSelect}).remove()//然后删除对应的标签let res2=await tabsTable.where({openId:dbCmd.eq(openId),tabsName:tabsSelect}).remove()return {code:10000,msg:'更新成功'}},
}
2.4,修改标签

先画好页面:

2-4.png

前端的接口调用:

      //更新标签名async updateTabs(){let num=Number(this.newTabsNum)let params={token:this.token,oldTabsName:this.updatetabsSelect,newTabsName:this.newTabsName,newTabsNum:num}if(this.updatetabsSelect||!this.newTabsName || typeof num != 'number'){uni.showToast({title: "请输入合法值",duration: 1500});}const tabs = uniCloud.importObject('tab') // 导入云对象const res = await tabs.updateTabs(params)this.updatetabsSelect=this.newTabsName=this.newTabsNum=''this.getTabs()uni.showToast({title: res.msg,duration: 1500});},

后端对应的接口,当然这个updateTabs方法和前文两个接口一样,我为了统一管理,放在同一个云对象里面了,这里为了减少篇幅,只复制了该方法出来.

  //更新标签名async updateTabs(param){const {token,oldTabsName,newTabsName,newTabsNum}=paramlet result=JSON.parse(decrypt(token))const openId=result.openidlet res=await tabsTable.where({openId:dbCmd.eq(openId)}).get()let res2=res.data.filter(item=>{return item.tabsName==newTabsName})if(res2.length>0&&newTabsName!=oldTabsName){return {code:10001,msg:'该标签名已存在'}}else{//更新标签对应的文本为新标签//第一步:先找到该用户该标签的所有数据let resTabnotes = await notesTable.where({openId:dbCmd.eq(openId),tabsSelect:oldTabsName}).update({tabsSelect:newTabsName})//更新-标签let resTabs = await tabsTable.where({openId:dbCmd.eq(openId),tabsName:oldTabsName}).update({tabsName:newTabsName,tabsNum:newTabsNum})return {code:10000,msg:'更新成功'}}}
2.5,查询标签

前端的接口调用:

//获取所有的标签
async getTabs(){const tabs = uniCloud.importObject('tab') // 导入云对象const res = await tabs.getTabs({token:this.token})this.tabsList=res.datathis.columns[0]=res.data.map(item=>item.tabsName)
},

后端的接口调用:

  async getTabs(param){const {token}=paramlet result=JSON.parse(decrypt(token))let openId=result.openid//需要排序let res=await tabsTable.where({openId:dbCmd.eq(openId)}).orderBy('tabsNum','asc').get()let result2=res.data.map(item=>{return {tabsName:item.tabsName,tabsNum:item.tabsNum}})return {code:10000,data:result2}},

其他的业务开发大同小异,就不多说啦.其他功能可以扫描我文章开头的二维码,体验一下,这个小程序是我自己将一直使用的,这里就当打个小广告吧,也会持续维护迭代.有啥优化意见大家也可以提哈.

三,我的小程序体验

我对应这个教程的小程序,可以看下图,扫码体验:

01.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/163652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UltraCompare 23 for Mac文件对比工具

UltraCompare是一款功能强大的文件比较和合并工具&#xff0c; 以下是它的特色介绍&#xff1a; 多种文件格式支持&#xff1a;UltraCompare支持比较和合并多种文件格式&#xff0c;包括文本文件、二进制文件、office文档、PDF文件等。 文件差异高亮显示&#xff1a;UltraComp…

内测分发平台的合作生态和生态效应如何

大家好&#xff0c;我是咕噜-凯撒&#xff0c;随着移动互联网和智能设备的快速发展&#xff0c;越来越多的开发者和企业开始关注产品的质量和体验。而内测分发平台则成为了一种重要的工具&#xff0c;能够帮助他们更好地测试、优化和推广产品。在此过程中&#xff0c;内测分发平…

特殊企业信息轻松查询:特殊企业基本信息查询API的实用性探讨

引言 在当今数字化时代&#xff0c;企业管理和决策往往取决于有效获取和分析关键信息。对于特殊企业&#xff0c;如香港公司、社会组织、律所、事业单位、基金会和新机构&#xff0c;获取准确、及时的基本信息至关重要。在这个背景下&#xff0c;特殊企业基本信息查询API正逐渐…

〔004〕虚幻 UE5 像素流部署

✨ 目录 ▷ 启用像素流插件▷ 打包项目▷ 下载环境包▷ 手动下载▷ 安装信令服务器环境▷ 启动信令服务器▷ 设置启动参数▷ 启动程序▷ 网页运行▷ 开启触控界面▷ 启用像素流插件 打开虚幻启动程序,选择 编辑 后点击 插件在插件列表中搜索 pixel streaming 关键字,勾选后重…

springcloud宿舍管理系统源码

开发技术&#xff1a; jdk1.8&#xff0c;mysql5.7&#xff0c;idea&#xff0c;vscode springcloud springboot mybatis vue elementui 功能介绍&#xff1a; 用户端&#xff1a; 登录注册 首页展示轮播&#xff0c;公告&#xff0c;报修&#xff0c;晚归登记&#xff0…

提升抖音小店服务分:优化策略与实操指南

抖音小店服务分是抖音平台为评估和提升小店服务质量而设立的一项指标。它通过对小店在订单管理、售后服务、物流管理等多个方面的表现进行评估和计算&#xff0c;为小店提供一个可衡量的服务质量指标。提高抖音小店服务分数对于增加用户信任度、提升销售额和增加曝光度都非常重…

第十七章 Java链接数据库

目录 1.登录MySQL 2.创建库和表 3.使用Java命令查询数据库操作 4.右击——点击“Build Path”——选择第四个——找到包的位置——导入成功 一、创建java项目 1.注册驱动 2.获取链接 3.获取statment对象 4.执行sql语句返回结果集 5.遍历结果集 6.关闭连接释放资源 封装…

Linux:设置Ubuntu的root用户密码

执行以下命令&#xff1a; 给root用户设置密码 sudo passwd 输入两次密码 切换root su root 退出root用户 exit

windows根据已有的安卓签名文件获取MD5签名

windows根据已有的安卓签名文件获取MD5签名 0 现状 uniapp 本机号码一键登录需要MD5的&#xff0c;现有的签名文件但是只有SHA1和SHA256 查看SHA1和SHA256 keytool -list -v -keystore [你的.keystore文件]1 前提 已有生成签名文件的环境 搭建Openssl环境&#xff0c;设置…

0基础能不能转行做网络安全?网络安全人才发展路线

最近有同学在后台留言&#xff0c;0基础怎么学网络安全&#xff1f;0基础可以转行做网络安全吗&#xff1f;以前也碰到过类似的问题&#xff0c;想了想&#xff0c;今天简单写一下。 我的回答是先了解&#xff0c;再入行。 具体怎么做呢&#xff1f; 首先&#xff0c;你要确…

idea 2023 安装配置 Gradle8.4

官网&#xff1a;https://gradle.org 下载 Gradle8.4 https://gradle.org/releases/ 解压到本地&#xff0c;到 gradle-8.4\init.d 目录下新建文件&#xff1a;init.gradle 这里有个坑&#xff0c;编译报http协议安全的问题&#xff0c;解决办法&#xff0c;加入&#xff1…

Android7.1 高通平台 修改系统默认语言

客户需求&#xff1a;修改系统默认语言为英文&#xff08;美国&#xff09; 源码位置&#xff1a;/build/tools/buildinfo.sh 只需修改 ro.product.locale的值即可&#xff0c;如下图&#xff1a;

【Java】定时器的简单应用

在写代码的过程中&#xff0c;如果我们遇到了隔一段时间就要进行一项任务时&#xff0c;采用定时器会提高我们的效率。下面对定时器的使用进行简单说明 1、应用说明 首先我们要创建一个Timer类 Timer timer new Timer(); 然后在timer中调用schedule()方法添加任务 timer.…

redis运维(十三) hash哈希

一 哈希 ① 定义 hash&#xff1a; 散列说明&#xff1a;key对应是值是键值对[python中的字典],其中键在redis中叫field.形如&#xff1a;value[{field1,value1},...{fieldN,valueN}],值本身又是一种键值对结构 ② 优点和缺点 wzj_height 180wzj_age 18等价 -->…

Confluence Server Webwork 预身份验证 OGNL 注入 (CVE-2021-26084)

漏洞描述 Confluence 是由澳大利亚软件公司 Atlassian 开发的基于 Web 的企业 wiki。 存在一个 OGNL 注入漏洞&#xff0c;允许未经身份验证的攻击者在 Confluence Server 或 Data Center 实例上执行任意代码。 漏洞环境及利用 搭建docker环境 Confluence搭建见前文 Atlas…

高效聚合 | AIRIOT智慧虚拟电厂管理解决方案

传统的电力供应模式主要依靠大型发电厂和电网进行能源传输和分配&#xff0c;但这种模式会导致能源浪费、环境污染等问题&#xff0c;往往存在如下的运维问题和管理痛点&#xff1a; 资源整合能力差&#xff1a;传统电力供应模式无法集成和整合分散的电力资源&#xff0c;包括…

深度学习动物识别 - 卷积神经网络 机器视觉 图像识别 计算机竞赛

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

课堂巡课如何提升教学质量?简单才是硬道理

随着教育技术的不断发展&#xff0c;在线巡课系统逐渐成为学校管理和教育质量提升的重要工具。在线巡课系统通过数字化手段&#xff0c;为学校提供了更加高效、精准的巡课管理方式&#xff0c;有力地支持了教育教学的改进和优化。 客户案例 小学巡课项目 山东某小学引入了泛地…

8.5 Windows驱动开发:内核注册表增删改查

注册表是Windows中的一个重要的数据库&#xff0c;用于存储系统和应用程序的设置信息&#xff0c;注册表是一个巨大的树形结构&#xff0c;无论在应用层还是内核层操作注册表都有独立的API函数可以使用&#xff0c;而在内核中读写注册表则需要使用内核装用API函数&#xff0c;如…

海外媒体推广发稿平台这8种方法助你一臂之力-华媒舍

在全球经济一体化和信息技术快速进步的背景下&#xff0c;海外市场的开拓对于企业的发展至关重要。要在海外市场上取得成果并非易事&#xff0c;因此我们需要借助一些方法来帮助我们取得成功。其中&#xff0c;海外媒体推广发稿平台是非常有效的工具之一。本文将介绍8种方法&am…