我要点爆”微信小程序云开发之项目建立与我的页面功能实现


Posted in Javascript onMay 26, 2019

开发环境搭建

使用自己的AppID新建小程序项目,后端服务选择小程序·云开发,点击新建,完成项目新建。

我要点爆”微信小程序云开发之项目建立与我的页面功能实现

新建成功后跳转到开发者工具界面

我要点爆”微信小程序云开发之项目建立与我的页面功能实现

新建后,微信端为我们提供了一个参考的模板程序,这里我们自己来创建各个所需的文件与代码,所以删除所有不需要的文件,删除cloudfunctions、miniprogram/images、miniprogram/pages文件下所有文件,同时也删除style文件和删除app.json中原始的页面配置。

我要点爆”微信小程序云开发之项目建立与我的页面功能实现

我要点爆”微信小程序云开发之项目建立与我的页面功能实现

此时编译下方控制台会报“VM8100:5 appJSON["pages"] 需至少存在一项”错误,因为app.json中未配置任何页面路径,下面我们来对app.json进行配置。

{
 "cloud": true,
 "pages": [
 "pages/index/index",
 "pages/detonation/detonation",
 "pages/user/user"
 ],

“cloud”: true表示让云能力可以在所有基础库中使用,在页面路径列表pages下加入三个Tab页面路径,在window中设置全局的默认窗口样式,通过tabBar设置底部tab栏的样式,配置完成后点击编译,开发工具会自动生成三个页面的文件夹以及相关文件。

"window": {
 "backgroundTextStyle": "light",
 "navigationBarBackgroundColor": "#FF3333",
 "navigationBarTitleText": "我要点爆",
 "navigationBarTextStyle": "white",
 "backgroundColor": "#FF3333"
 },
 "tabBar": {
 "backgroundColor": "#F2F2F2",
 "color": "#6B6B6B",
 "selectedColor": "#FF0000",
 "list": [
  {
  "pagePath": "pages/index/index",
  "text": "世界",
  "iconPath": "/images/shi.png",
  "selectedIconPath": "/images/shi1.png"
  },
  {
  "pagePath": "pages/detonation/detonation",
  "text": "点爆",
  "iconPath": "/images/bao2.png",
  "selectedIconPath": "/images/bao1.png"
  },
  {
  "pagePath": "pages/user/user",
  "text": "我的",
  "iconPath": "/images/wo1.png",
  "selectedIconPath": "/images/wo.png"
  }
 ]
 },
 "sitemapLocation": "sitemap.json"
}

配置成功后页面结构与效果

我要点爆”微信小程序云开发之项目建立与我的页面功能实现

我要点爆”微信小程序云开发之项目建立与我的页面功能实现

创建数据库环境

设置环境名称,环境名称可以根据自己需求设置,这里设置与项目名相同dbx,下方的环境ID会自动生成,无需修改,点击确定完成创建。

我要点爆”微信小程序云开发之项目建立与我的页面功能实现

创建成功后跳转云开发控制台页面

我要点爆”微信小程序云开发之项目建立与我的页面功能实现

配置app.js文件,在调用云开发各 API 前,需先调用初始化方法 init 一次(全局只需一次),在wx.cloud.init中设置程序所读环境的数据库位置,刚才创建的数据库环境的ID

我要点爆”微信小程序云开发之项目建立与我的页面功能实现我要点爆”微信小程序云开发之项目建立与我的页面功能实现

实现我的页面布局制作与用户授权登录功能

首先对页面进行布局,头部使用一个button按钮来进行授权登录获取用户信息的操作,设置button的open-type为getUserInfo,使得按钮可以从bindgetuserinfo回调中获取到用户信息,设置回调方法为getUserInfoHandler。为了让用户授权后实时更新用户头像与用户名,这里使用数据绑定与判断的方法。

<!-- pages/user/user.wxml -->
<view class="user_header">
 <view class="header_box">
 <image src="{{userTx || defaultUrl}}"></image>
 <button class="{{username == '点击登录' ? 'usernameDe' : 'username'}}" open-type="getUserInfo" bindgetuserinfo="getUserInfoHandler">{{username}}</button>
 <view class="qiandao">
  <text>糖果</text>
 </view>
 </view>
</view>
<view class="user_main">
 <view class="main_box">
 <view class="box_item">
  <image src="/images/jilu.png"></image>
  <text>点爆记录</text>
 </view>
 <view class="box_item">
  <image src="/images/zhudian.png"></image>
  <text>最近助点</text>
 </view>
 </view>
 <view class="main_box">
 <view class="box_item">
  <image src="/images/fengcun.png"></image>
  <text>我的封存</text>
 </view>
 <view class="box_item">
  <image src="/images/usercang.png"></image>
  <text>我的收藏</text>
 </view>
 </view>
</view>

页面布局完成后进行user.js的编写,data中设置页面初始数据,username用于控制授权按钮用户名变换,defaultUrl设置默认头像,userTx记录用户头像,userInfo记录用户授权后所获取的信息,gender用与用户性别判断,province用于记录地区信息。

// pages/user/user.js
Page({
 data: {
 username: '点击登录',
 defaultUrl: '/images/yuyin5.png',
 userTx: '',
 userInfo: {},
 gender: 1,
 province: '',
 },

在onLoad中对页面进行初始化设置和用户是否登录的初始化设置,在用户授权登录后直接使用本地的用户信息,如果本地信息不存在则通过wx.getSetting获取用户设置,看用户是否授权过,如果授权过,则wx.getUserInfo直接获取用户信息。

onLoad: function () {
 wx.setNavigationBarTitle({
  title: '我的'
 })
 //当重新加载这个页面时,查看是否有已经登录的信息
 let username = wx.getStorageSync('username'),
  avater = wx.getStorageSync('avatar');
 if (username) {
  this.setData({
  username: username,
  userTx: avater
  })
 }
 wx.getSetting({
  success: res => {
  if (res.authSetting['scope.userInfo']) {
   wx.getUserInfo({
   success: res => {
    this.setData({
    userTx: res.userInfo.avatarUrl,
    userInfo: res.userInfo
    })
   }
   })
  }
  }
 })
 },

getUserInfoHandler方法保存系统常用的用户信息到本地和完成用户信息数据库注册,**button组件中bindgetuserinfo方法回调的detail数据与wx.getUserInfo返回的一致**,通过detail将所需的用户信息提取出来,将性别gender替换为‘男'和‘女',将头像、用户名、性别、地区保存在本地。然后使用云数据库API进行数据库操作。

getUserInfoHandler: function (e) {
 let d = e.detail.userInfo
 var gen = d.gender == 1 ? '男' : '女'
 this.setData({
  userTx: d.avatarUrl,
  username: d.nickName
 })
 wx.setStorageSync('avater', d.avatarUrl)
 wx.setStorageSync('username', d.nickName)
 wx.setStorageSync('gender', gen)
 wx.setStorageSync('province', d.province)
 //获取数据库引用
 const db = wx.cloud.database()
 const _ = db.command
 //查看是否已有登录,无,则获取id
 var userId = wx.getStorageSync('userId')
 if (!userId) {
  userId = this.getUserId()
 }
 //查找数据库
 db.collection('users').where({
  _openid: d.openid
 }).get({
  success(res) {
  // res.data 是包含以上定义的记录的数组
  //如果查询到数据,将数据记录,否则去数据库注册
  if (res.data && res.data.length > 0) {
   wx.setStorageSync('openId', res.data[0]._openid)
  } else {
   //定时器
   setTimeout(() => {
   //写入数据库
   db.collection('users').add({
    data: {
    userId: userId,
    userSweet: 10,
    voice: 0,
    baovoice: 0,
    iv: d.iv
    },
    success: function () {
    console.log('用户id新增成功')
    db.collection('users').where({
     userId: userId
    }).get({
     success: res => {
     wx.setStorageSync('openId', res.data[0]._openid)
     },
     fail: err => {
     console.log('用户_openId设置失败')
     }
    })
    },
    fail: function (e) {
    console.log('用户id新增失败')
    }
   })
   }, 100)
  }
  },
  fail: err => {

  }
 })
 },
 getUserId: function () {
 //生产唯一id,采用一个字母或数字+1970年到现在的毫秒数+10w的一个随机数组成
 var w = "abcdefghijklmnopqrstuvwxyz0123456789",
  firstW = w[parseInt(Math.random() * (w.length))];
 var userId = firstW + (Date.now()) + (Math.random() * 100000).toFixed(0)
 wx.setStorageSync('userId', userId)
 return userId;
 },
})

在云开发控制台中创建数据库集合,我们新建一个users集合,我们只需新建集合,通过js中使用云开发API可自动创建集合中的属性和数据。

我要点爆”微信小程序云开发之项目建立与我的页面功能实现

该users集合为用户信息表,记录用户信息,表users的结构如下:

我要点爆”微信小程序云开发之项目建立与我的页面功能实现

集合创建成功后,点击将出现进行编译,此时页面效果如下:

我要点爆”微信小程序云开发之项目建立与我的页面功能实现

我们点击“点击登录”按钮,然后对程序进行授权,授权后可以看到我们的头像和用户名都显示出来了,同时,打开云开发控制台,查看users集合,可以看到我们信息已经成功保存在了集合中。

我要点爆”微信小程序云开发之项目建立与我的页面功能实现我要点爆”微信小程序云开发之项目建立与我的页面功能实现

我要点爆”微信小程序云开发之项目建立与我的页面功能实现

至此,我们就完成了

1、云端控制台数据库的创建
2、我的页面的样式制作
3、用户授权登录功能制作
4、云数据库的用户数据存储的实现

项目源码:https://github.com/xiedong2016/dbx

总结

以上所述是小编给大家介绍的我要点爆”微信小程序云开发之项目建立与我的页面功能实现,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Javascript与flash交互通信基础教程
Aug 07 Javascript
判断某个字符在一个字符串中是否存在的js代码
Feb 28 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
May 14 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
Aug 10 Javascript
javascript随机抽取0-100之间不重复的10个数
Feb 25 Javascript
bootstrap table表格插件使用详解
May 08 Javascript
Javascript 严格模式use strict详解
Sep 16 Javascript
vue.js简单配置axios的方法详解
Dec 13 Javascript
Node.js中的child_process模块详解
Jun 08 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
Jul 19 Javascript
微信小程序 导入图标实现过程详解
Oct 11 Javascript
Vue Router中应用中间件的方法
Aug 06 Javascript
vue指令做滚动加载和监听等
May 26 #Javascript
vxe-table vue table 表格组件功能
May 26 #Javascript
使用Vue.observable()进行状态管理的实例代码详解
May 26 #Javascript
微信小程序 swiper 组件遇到的问题及解决方法
May 26 #Javascript
vue项目打包后怎样优雅的解决跨域
May 26 #Javascript
vue实现的上拉加载更多数据/分页功能示例
May 25 #Javascript
vue实现的请求服务器端API接口示例
May 25 #Javascript
You might like
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
php实现html标签闭合检测与修复方法
2015/07/09 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
arguments对象
2006/11/20 Javascript
javascript得到当前页的来路即前一页地址的方法
2014/02/18 Javascript
理解javascript回调函数
2014/12/28 Javascript
使用vue构建一个上传图片表单
2017/07/04 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
node.js基于express使用websocket的方法
2017/11/09 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
微信小程序实现图片上传功能
2018/05/28 Javascript
JavaScript工具库MyTools详解
2020/01/01 Javascript
详解Vue之事件处理
2020/07/10 Javascript
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
python 限制函数执行时间,自己实现timeout的实例
2019/01/12 Python
django fernet fields字段加密实践详解
2019/08/12 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
Python 点击指定位置验证码破解的实现代码
2019/09/11 Python
使用tqdm显示Python代码执行进度功能
2019/12/08 Python
Python基础之变量基本用法与进阶详解
2020/01/03 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
大二学生职业生涯规划书
2014/02/05 职场文书
管事部库房保管员岗位职责
2014/02/21 职场文书
环保建议书400字
2014/05/14 职场文书
师德师风承诺书
2014/05/23 职场文书
五心教育心得体会
2014/09/04 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
质检员工作总结2015
2015/04/25 职场文书
电力培训学习心得体会
2016/01/11 职场文书
python通过函数名调用函数的几种方法总结
2021/06/07 Python
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js