这段时间在写一个公司的微信小程序,一个商城类项目,项目还没有结束,在这里先做一下总结,方便以后浏览查看。
·关于登录
项目最主要的是:两类用户,1-普通用户,不需要注册,只需要获取用户的openId作为用户的登录标志就行;2-供应商用户,需要手机号注册,等待后台审核通过,同时也需要获取用户的openId。
先说一说登录的处理:用户一进入小程序先进入登录页面(登录页面两个按钮,分别是买家登录和供应商登录),会先判断用户是否授权个人信息,
wx.getSetting({ success: function (res) { if (res.authSetting['scope.userInfo']) { // 已经授权,可以直接调用 getUserInfo 获取头像昵称 wx.getUserInfo({ success: function (res) { //将userInfo存入全局变量中 app.globalData.userInfo = res.userInfo; that.login(); } }) } } })
如果已经授权,就获取用户个人信息保存在全局变量userInfo中,再调用login函数判断用户的登录转态,主要是判断本地存储中是否存在sessionId(后台存储用户id,类别等信息的session),如果有就说明已经登录了,没有就重新获取然后再保存,之后就直接跳去首页
如果没有授权,页面就不会跳转,停留在登录页,等待用户进行下一步操作:1.普通用户,点击买家登录,弹出是否授权,之后调用login函数判断是否登录,然后再跳转去首页;2.供应商用户,点击供应商登录,同样会弹出用户授权,然后跳去供应商登录页面,输入手机号密码进行登录跳去首页,同样需要保存后台返回的sessionId到本地存储。
//用户登录获取sessionId login:function(){ wx.checkSession({ success: function () { console.log('登录未失效') //session_key 未过期,并且在本生命周期一直有效 //如果sessionId已经存在,就说明已经登录,直接跳转去首页 if (wx.getStorageSync('sessionId')) { wx.switchTab({ url: '/pages/index/index', }) return; }; var that = this; //如果sessionId不存在,说明没有登录,就让用户登录获取sessionId,然后再去首页 wx.login({ success: function (res) { if (res.code) { wx.request({ url: 'http://', data: { code: res.code }, method: 'GET', sucess: function (res) { if (res.statusCode == 200) { wx.setStorageSync('sessionId', res.data.SessionId); wx.switchTab({ url: '/pages/index/index', }) } } }) } }, fail: function () { console.log('登录时网络出错'); }, complete: function () { } }) }, fail: function () { // session_key 已经失效,需要重新执行登录流程 //重新登录,获取sessionId存入本地 console.log('登录已经失效') wx.login({ success: function (res) { if (res.code) { wx.request({ url: 'http://', data: { code: res.code }, method: 'GET', sucess: function (res) { if (res.statusCode == 200) { wx.setStorageSync('sessionId', res.data.SessionId); wx.switchTab({ url: '/pages/index/index', }) } } }) } }, fail: function () { console.log('登录时网络出错'); }, complete: function () { } }) } }) },
·关于组件
父组件调用子组件<getCode phone="{{phone}}" bind:myevent="onGetCode"></getCode>
父组件传值给子组件
properties: { phone: { // 属性名(父组件传的值) type: Number, // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型) value: '' // 属性初始值(可选),如果未指定则会根据类型选择一个 } }
子组件传值给父组件<input type='number' bindinput="bindCode"></input>
//将输入的验证码传给父组件 bindCode: function (e) { var myEventDetail = { val: e.detail.value } // detail对象,提供给事件监听函数 this.triggerEvent('myevent', myEventDetail) }
父组件获取子组件传过来的值
//bind:myevent是子组件中定义的函数 来获取内部的值 onGetCode: function (e) { this.setData({ code: e.detail.val }) }
父组件要使用子组件是,必须要去json文件中声名
{ "usingComponents": { "getCode": "../../components/getCode/getCode" } }
·关于wxParse的使用
因为小程序中不支持将模板字符串直接生成html<a url='https://github.com/icindy/wxParse'>wxParse-微信小程序富文本解析组件</a>
在要引用的page
/*wxss*/ /*引入wxParse.wxss文件*/ @import '../../../wxParse/wxParse.wxss';
<!--html --> <view class='content'> <import src="../../../wxParse/wxParse.wxml"/> <view class="wxParse"> <template is="wxParse" data="{{wxParseData:article.nodes}}"/> </view> </view>
//js /* *新闻详情的格式图片<img src='' /> *文字 <view>文字</view> *外面不需要包裹其他标签 * */ article: "<img src='' /><view >test文字</view>" onLoad: function (options) { WxParse.wxParse('article', 'html', this.data.article, this, 0); }未完待续。。。。