小程序·云开发实战 - 体重记录小程序

前一段看到朋友圈里总是有人用txt记录体重,就特别想写一个记录体重的小程序, 现在小程序的云开发有云函数、数据库,真的挺好用,很适合个人开发者,服务器域名什么都不用管,云开发让你完全不用操心这些东西。

先看看页面效果图吧:

0
0
0
0
0
0
0

记录的几个点:

1.全局变量 globalData

2.npm 的使用

3.云函数

4.数据库操作

5.async 的使用

6.分享的配置

7.antV使用

8.tabBar地址跳转

9.切换页面刷新

1.全局变量 globalData

首次进入后,要存储openId给其他页面使用,使用globalData共享。

<!--app.js 设置 globalData.openid --> 
App({onLaunch: function () {this.globalData = {}wx.cloud.init({})wx.cloud.callFunction({name: 'login',data: {},success: res => {this.globalData.openid = res.result.openidwx.switchTab({url: '/pages/add/add',fail: function(e) {}})}, fail: err => { }})}
})<!--其他页面引用-->
const app = getApp()  // 获得实例
app.globalData.openid // 直接引用即可

2.npm 的使用

1.进入小程序源码miniprogram 目录,创建 package.json 文件(使用 npm init 一路回车)

2.npm i --save 我们要安装的 npm

3.设置微信开发者工具 构建 npm

4.package.json 增加 "miniprogram": "dist" 打包目录字段,如果不设置的话上传和预览不成功,提示文件包过大。

cd miniprogram
npm init 
npm i @antv/f2-canvas --save   // 我用到了f2,可以换成其他包

设置微信开发者工具

0

构建 npm

0

最后,务必添加 miniprogram 字段

{"name": "21Day","version": "1.1.0","miniprogram": "dist","description": "一个21天体重记录的app","license": "MIT","dependencies": {"@antv/f2-canvas": "~1.0.5","@antv/wx-f2": "~1.1.4"},"devDependencies": {}
}

3.云函数

官方解释 云函数即在云端(服务器端)运行的函数 ,服务端是 node.js ,都是 JavaScript 。官方有数据库的操作,但是更新的操作强制要求使用云函数, 另外,如果云函数中使用了 npm 包,记得在所在云函数文件夹右键上传并部署,不然运行失败。

0

上一个例子,更新体重的云函数

// 云函数
const cloud = require('wx-server-sdk')
const moment = require('moment')cloud.init({ traceUser: true }
)const db = cloud.database()
const wxContext = cloud.getWXContext()exports.main = async (event, context) => {// event 入参参数delete event.userInfotry {return await db.collection('list').where({_openid:wxContext.OPENID,date:moment().format('YYYY-MM-DD')}).update({data: {...event},})} catch(e) {console.error(e)}
}

小程序端调用

wx.cloud.callFunction({name: 'add',data: {...Param},success: res => {wx.showToast({title: '新增记录成功',})},fail: err => { wx.showToast({icon: 'none',title: '新增记录失败'})}})

4.数据库操作

其实是接入的 MongoDB ,封装了一部分 api 出来,详细的就看官方文档吧,有区分服务端和小程序段。

const db = wx.cloud.database()// 查询数据
db.collection('list').where({_openid: app.globalData.openid,date: moment().subtract(1, 'days').format('YYYY-MM-DD'),
}).get({success: function (res) {// do someThing}
})

5.async 的使用

0

官方文档提示不支持 async,需要引入 regeneratorRuntime 这个包,先 npm i regenerator
然后把 node_modules 文件夹下的 regenerator-runtimeruntime-module.jsruntime.js 两个文件拷贝到lib目录下,在页面上引入即可。

<!--事例-->
const regeneratorRuntime = require('../../lib/runtime.js')
onLoad: async function (options) {// 获取当天数据await this.step1()// 时间类型设置let nowHour = moment().hour(),timeTypenowHour > 12 ? timeType = 'evening' : timeType = 'morning'this.setData({timeType})}

6.分享的配置

分享很简单,有区分右上角的直接分享和点击按钮分享

onShareAppMessage: function (res) {// 右上角分享let ShareOption = {title: '21天体重减肥记录',path: '/pages/index/index',} // 按钮分享if(res.from == "button"){ShareOption = {title: '来呀 看看我的减肥记录呀',path: '/pages/detail/detail?item=' + app.globalData.openid,} }return ShareOption}

分享后,他人点击页面,跳转到对应 pages 地址,从 onLoadoptions中拿入参请求数即可

onLoad: function (options) {const db = wx.cloud.database()let This = thislet resault = {}db.collection('list').where({_openid: options.item}).get({success: function (res) {resault = res.dataThis.setData({resault:resault})}})},

7.antV使用

上边第二小节有提到 antV 的安装,就不再赘述,直接说一下再页面中引用。

说下使用,需要设置一个全局变量储存图表的实例,然后在钩子函数内容使用 changeData 方法修改数据。

index.json 中引入包名

{"usingComponents": {"ff-canvas": "@antv/f2-canvas"}
}
// 引入F2
import F2 from '@antv/wx-f2';// 设置实例全局变量(务必)
let chart = null;
function initChart(canvas, width, height, F2) { // 使用 F2 绘制图表let data = [// { timestamp: '1951 年', step: 38 },];chart = new F2.Chart({el: canvas,width,height});chart.source(data, {step: {tickCount: 5},timestamp: {tickCount: 8},});chart.axis('timestamp', {label(text, index, total) {const textCfg = {};if (index === 0) {textCfg.textAlign = 'left';}if (index === total - 1) {textCfg.textAlign = 'right';}return textCfg;}});chart.axis('step', {label(text) {return {text: text / 1000 + 'k步'};}});chart.tooltip({showItemMarker: false,onShow(ev) {const { items } = ev;items[0].name = null;items[0].name = items[0].title;items[0].value = items[0].value + '步';}});chart.area().position('timestamp*step').shape('smooth').color('l(0) 0:#F2C587 0.5:#ED7973 1:#8659AF');chart.line().position('timestamp*step').shape('smooth').color('l(0) 0:#F2C587 0.5:#ED7973 1:#8659AF');chart.render();return chart;
}// 生命周期函数
onLoad(){// 使用changeData赋值chart.changeData(stepInfoList)
}

8.tabBar地址跳转

如果要跳转的地址不在 app.jsontabBar 内可以使用 wx.navigateTo ,如果在死活跳不过去,要使用wx.switchTab 方法跳转。

wx.switchTab({url: '/pages/add/add',fail: function(e) {}
})wx.navigateTo({url: '../deployFunctions/deployFunctions',
})

9.切换页面刷新

切换几个tabBar的时候,需要刷新数据。 在 onShow 方法中再调用一下 onLoad 方法就可以了。

onShow: function () {this.onLoad()
}

源码链接

https://github.com/TencentCloudBase/Good-practice-tutorial-recommended


如果你有关于使用云开发CloudBase相关的技术故事/技术实战经验想要跟大家分享,欢迎留言联系我们哦~比心!

aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9rbkhKUTZycDJJdTRqREU0Y1BzaWIxdEJvbTVCUWpyMFppYTJ6M21mUkpoVFppYmljdjFydFVHVTdZeWN3SXZYdUJPY3o3a3htaWNBVWhZUGlhdWljeERpYjQycllnLzA#pic_center

转载于:https://www.cnblogs.com/CloudBase/p/11303340.html

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

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

相关文章

mybatis学习(34):动态sql-choose

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

小程序·云开发实战 - 校园约拍小程序

创意来源于生活&#xff0c;之所以开发这个校园约拍小程序&#xff0c;是因为在摄影选修课上常听老师抱怨外出写生老找不到模特&#xff0c;许多大学生都想拥有一套专属自己记忆的摄影作品&#xff0c;记录下不会磨灭的美好回忆&#xff0c;可如何找到让自己满意的摄影师是他们…

mybatis学习(35):sql-where

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

mybatis学习(36):动态sql-set

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

从10亿光年到0.1飞米的世界 (经典!震撼!)

从10亿光年到0.1飞米的世界! 10亿光年,是一个什么概念?光年:光走一年的路程.光速:每秒299792458米,一秒可绕地球7圈半.在10亿光年下观测的宇宙.上面的每一个象素点所表现的事物都是无比古远的.1亿光年.把视野缩小了10倍,宇宙看起来还是星光点点,1000万光年,把眼光再降低一个数…

高效、稳定开发功能的一些心得

在开始编码前一定要足够了解案子&#xff0c;了解各种特殊情况&#xff0c;和美术、策划、服务器沟通好&#xff0c;最后写好伪代码。 一些建议 1.尽量复用&#xff0c;例如重复的对象单独抽出来做成item&#xff0c;别的模块也用到的做成通用item&#xff0c;不要写重复代码。…

Flume与Kafka整合案例详解

环境配置 名称 版本 下载地址 Centos 7.0 64x 百度 Zookeeper 3.4.5 Flume 1.6.0 Kafka 2.1.0 flume笔记 直接贴配置文件 [rootzero239 kafka_2.10-0.10.1.1]# cat /opt/hadoop/apache-flume-1.6.0-bin/conf/kafka-conf.properties # The configuration file needs to …

mybatis学习(37):动态sql-trim

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

SQL-简单查询

/*人员&#xff1a;LDH功能&#xff1a;SQL-简单查询日期&#xff1a;2018-7-18*/USE TSQLFundamentals2008; GO-- Select some columns information. SELECT empid,lastname,firstname,address,city,country FROM HR.Employees;-- GROUP BY SELECT 国家 country,COUNT(1) AS …

mybatis学习(38):动态sql-foreach

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

mybatis学习(39):动态sql片段

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

中国古代十三美男

一、潘安    潘岳&#xff0c;就是人所周知的潘安&#xff0c;西晋时河南人氏&#xff0c;表字安仁&#xff0c;小字檀奴。其人“姿容既好&#xff0c;神情亦佳”。潘岳年轻时&#xff0c;坐车到洛阳城外游玩&#xff0c;当时不少妙龄姑娘见了他&#xff0c;都会怦然心动给他…

mybatis学习(40):逆向工程的创建

目录 首先导入我们的jar包 链接&#xff1a;https://pan.baidu.com/s/1Ent3kAwOagOZLT0XxDLEeA 提取码&#xff1a;zqpu 建立一个com.geyao.generator的包 generator的java类 package com.geyao.generator; import java.io.File; import java.util.*;import org.mybatis.ge…

SpringBoot中Tomcat配置(学习SpringBoot实战)

1、Tomcat配置 Spring Boot默认内嵌的Tomcat为Servlet容器&#xff0c;所以本节只讲对Tomcat配置&#xff0c;其实本节的配置对Tomcat、Jetty和Undertow都是通用的。 1.1 配置Tomcat 关于Tomcat的所有属性都在org.springframework.boot.autoconfigure.web.ServerProperties配…

axios的数据请求方式及跨域

express 的三大功能&#xff1a;静态资源、路由、模板引擎 app.use(express.static(www));  只要是创建这个静态的目录&#xff0c;这个 www 的静态目录里面的文件就可以被访问 数据的请求方式 axios get 的 请求方式    axios.get(url地址).then(function(success){  //…

mybatis学习(41):使用逆向工程

新建一个项目&#xff0c;将逆向工程的生成的拷贝进来 配置文件 log4j.properties ### \u914D\u7F6E\u6839 ### log4j.rootLogger debug,console ,fileAppender,dailyRollingFile,ROLLING_FILE,MAIL,DATABASE### \u8BBE\u7F6E\u8F93\u51FAsql\u7684\u7EA7\u522B\uFF0C\u5176…

[Alg] 二叉树的非递归遍历

1. 非递归遍历二叉树算法 (使用stack) 以非递归方式对二叉树进行遍历的算法需要借助一个栈来存放访问过得节点。 (1) 前序遍历 从整棵树的根节点开始&#xff0c;对于任意节点V&#xff0c;访问节点V并将节点V入栈&#xff0c;并判断节点V的左子节点L是否为空。若L不为空&#…

[c++]访MSN浮出窗口的示例

【声明】严格来讲&#xff0c;这篇文章不属于我的原创。我在这里参考了codeproject上的国外作者的模仿MSN浮出窗口的C#代码。换句话说&#xff0c;可以认为我把C#代码翻译成了C代码。另外&#xff0c;为了简化代码&#xff0c;CloseButton我没有采用自己绘制&#xff0c;而是用…

mybatis学习(42):mybatis的一级缓存

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Param;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer…

防止ASP.NET按钮多次提交的办法

方法一<asp:Button ID"btnSumbit" runat"server" UseSubmitBehavior"false" OnClientClick"this.valueSumbit;this.disabledtrue; " Text"Sumbit" OnClick"btnSumbit_Click" /> 方法二1<html xmlns"…