剛剛提交的小程序審覈經過了,把筆記發出來。 前一段看到朋友圈裏老是有人用txt記錄體重,就特別想寫一個記錄體重的小程序, 如今小程序的雲開發有云函數、數據庫,真的挺好用,很適合我的開發者,服務器域名什麼都不用管,雲開發讓你徹底不用操心這些東西。node
先看看頁面效果圖吧:git
記錄的幾個點:首次進入後,要存儲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.openid
wx.switchTab({
url: '/pages/add/add',
fail: function(e) {}
})
},
fail: err => {
}
})
}
})
<!--其餘頁面引用-->
const app = getApp() // 得到實例
app.globalData.openid // 直接引用便可
複製代碼
miniprogram
目錄,建立package.json
文件(使用npm init
一路回車)npm i --save
咱們要安裝的npm
包npm
package.json
增長"miniprogram": "dist"
打包目錄字段,若是不設置的話上傳和預覽不成功,提示文件包過大。cd miniprogram
npm init
npm i @antv/f2-canvas --save // 我用到了f2,能夠換成其餘包
複製代碼
設置微信開發者工具npm
構建npm
最後,務必添加miniprogram
字段json
{
"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": {}
}
複製代碼
官方解釋雲函數即在雲端(服務器端)運行的函數
,服務端是node.js
,都是JavaScript
。官方有數據庫的操做,可是更新的操做強制要求使用雲函數, 另外,若是雲函數中使用了npm
包,記得在所在雲函數文件夾右鍵上傳並部署,否則運行失敗。canvas
上一個例子,更新體重的雲函數小程序
// 雲函數
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.userInfo
try {
return await db.collection('list').where({
_openid:wxContext.OPENID,
date:moment().format('YYYY-MM-DD')
})
.update({
data: {
...event
},
})
} catch(e) {
console.error(e)
}
}
複製代碼
小程序端調用api
wx.cloud.callFunction({
name: 'add',
data: {
...Param
},
success: res => {
wx.showToast({
title: '新增記錄成功',
})
},
fail: err => {
wx.showToast({
icon: 'none',
title: '新增記錄失敗'
})
}
})
複製代碼
實際上是接入的MongoDB
,封裝了一部分api
出來,詳細的就看官方文檔把,有區分服務端和小程序段。bash
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
}
})
複製代碼
async
,須要引入
regeneratorRuntime
這個包,先
npm i regenerator
。 而後把
node_modules
文件夾下的
regenerator-runtime
的
runtime-module.js
和
runtime.js
兩個文件拷貝到
lib
目錄下,在頁面上引入便可。
<!--事例-->
const regeneratorRuntime = require('../../lib/runtime.js')
onLoad: async function (options) {
// 獲取當天數據
await this.step1()
// 時間類型設置
let nowHour = moment().hour(),timeType
nowHour > 12 ? timeType = 'evening' : timeType = 'morning'
this.setData({timeType})
}
複製代碼
分享很簡單,有區分右上角的直接分享和點擊按鈕分享服務器
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
地址,從onLoad
的options
中拿入參請求數便可
onLoad: function (options) {
const db = wx.cloud.database()
let This = this
let resault = {}
db.collection('list').where({
_openid: options.item
}).get({
success: function (res) {
resault = res.data
This.setData({
resault:resault
})
}
})
},
複製代碼
上邊第二小節有提到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)
}
複製代碼
若是要跳轉的地址不在app.json
的tabBar
內可使用wx.navigateTo
,若是在死活跳不過去,要使用wx.switchTab
方法跳轉。
wx.switchTab({
url: '/pages/add/add',
fail: function(e) {}
})
wx.navigateTo({
url: '../deployFunctions/deployFunctions',
})
複製代碼
切換幾個tabBar的時候,須要刷新數據。 在onShow
方法中再調用一下onLoad
方法就能夠了。
onShow: function () {
this.onLoad()
}
複製代碼
debug
。不知道本身能更幾個版本,不過跟着練習唄,空了就更新。 立個flag,寫下list 哈哈。
碼字碼到手痠,爲本身加油。