小程序

登录

大概流程:
1.点击登录按钮获取用户的基本信息
2.然后存到vuex
3.登录获取token
4.将token存到vuex

详细流程:
1.设置登录按钮的open-type属性为getUserInfo,监听getuserinfo函数,用户点击同意后传回一个参数对象,里面包括用户的信息(地区,性别,微信名),然后渲染页面
2.调用wx.login()获取用户登录凭证,就是返回数据中的code
3.把用户信息跟code合并,发到服务器,服务器返回一个唯一token
4.后期通过token判断是否已登录,发起订单等

微信支付

  1. 先判断用户是否登录
    如何判断:判断是否有token,如果有token,就在请求拦截器中添加到一些特定的请求的请求头中。
  2. 创建订单
    调用创建订单的API接口,把订单信息发送到服务器,等待服务器返回订单编号
  3. 调用订单预支付的API接口,把订单编号发送服务器,等待服务器返回订单预支付的数据
  4. 调用微信支付API,wx.requestPayment(),把订单预支付数据传进去。

地址

1.点击按钮-调用wx.chooseAddress()获取用户收货地址
表现效果为 点击按钮跳转到微信的收货地址界面,并不是小程序的页面
2.如果用户未授权,可调用wx.openSetting(),调起客户端小程序设置界面,返回用户设置的操作结果。设置界面只会出现小程序已经向用户请求过的权限。

购物车:

image.png

左边是wx的radio复选框组件
右边是uni-ui 提供的NumberBox 组件

滑动删除需要用到 uni-ui 的 uni-swipe-action 组件和 uni-swipe-action-item。SwipeAction 滑动操作

优化:

  • 对上拉触底进行节流处理
    定义一个变量(节流阀):false表示当前没有数据请求,true表示正在进行数据请求。
    在调用请求函数中设置为true,在网络请求的complete回调函数中设置为false。
    在onReachBottom中判断节流阀,如果为true则阻止当前请求。
  • 配置小程序分包
    分包可以减少小程序首次启动时的加载时间,为此,我们在项目中,把 tabBar 相关的 4 个页面放到主包中,其它页面(例如:商品详情页、商品列表页)放到分包中。

其他

封装 uni.$showMsg() 方法

当数据请求失败之后,经常需要调用 uni.showToast({ /* 配置对象 */ }) 方法来提示用户。此时,可以在全局封装一个 uni.$showMsg() 方法,来简化 uni.showToast() 方法的调用。具体的改造步骤如下:

在 main.js 中,为 uni 对象挂载自定义的$showMsg() 方法:

// 封装的展示消息提示的方法
uni.$showMsg = function (title = '数据加载失败!', duration = 1500) {
  uni.showToast({
    title,
    duration,
    icon: 'none',
  })
}

今后,在需要提示消息的时候,直接调用uni.$showMsg() 方法即可:

应用的生命周期函数:

app.js中:

App({

  /**
   * 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
   */
  onLaunch: function () { },

  /**
   * 当小程序启动,或从后台进入前台显示,会触发 onShow
   */
  onShow: function (options) { },

  /**
   * 当小程序从前台进入后台,会触发 onHide
   */
  onHide: function () { },

  /**
   * 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息
   */
  onError: function (msg) { }
})
页面生命周期函数:

js文件中:

//index.js
//获取应用实例
const app = getApp()

Page({

  /**
   * 页面的初始数据
   */
  data: { },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) { },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () { },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () { },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () { },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () { },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () { },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () { },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () { }
})
微信给小程序都提供了以下9大类组件:

① 视图容器
② 基础内容
③ 表单组件
④ 导航组件
⑤ 媒体组件
⑥ map 地图组件
⑦ canvas 画布组件
⑧ 开发能力
⑨ 无障碍访问

常用的视图容器类组件:

view 组件:类似于div
scroll-view组件:可滚动试图区域
swiper组件:轮播图
text组件:文本组件,类似span
rich-text组件:富文本组件,支持把html字符串渲染为wxml结构。
button组件:可通过open-type属性调用微信提供的各种功能(客服、转发、获取用户授权、获取用户信息等)
Button 组件的详细文档
image组件:默认宽300px,高240px
navigator组件:导航组件,类似与a标签

小程序中的 API 是宿主环境提供的,通过这些丰富的微信原生 API,可以方便的调起微信提供的能力,如获取用户信息,本地存储,支付功能等。小程序官方把 API 分为如下 3 大类:
1. 事件监听 API
  • 特点:以 on 开头的 API 用来监听某个事件是否触发
  • 举例:wx.onWindowResize(function callback)
2. 同步 API
  • 特点1:以 Sync 结尾的 API 都是同步 API
  • 特点2:同步 API 的执行结果,可以通过函数返回值直接获取,如果执行出错会抛出异常
  • 举 例:wx.setStorageSync('key', value) 向本地存储中写入内容
3. 异步 API
  • 特点:类似于 jQuery 中的 $.ajax(options) 函数,需要通过 success、fail、complete 接收调用结果

  • 举例:wx.request() 发起网络数据请求,通过 success 回调函数接收数据

  • 小程序中,大多数的 API 都是异步 API

wx.request()发起get,post请求

微信小程序的生命周期函数:

onLoad事件:监听页面加载

onLoad: function (options) {
    this.getSwiperList()
}

option就是导航传递过来的参数对象。

小程序的宿主环境不是浏览器,不存在跨域。

AJAX核心是依赖于浏览器中的XMLHttpRequest对象,所以小程序中不能叫做发起ajax请求,而是叫做发起网络数据请求。

小程序中实现页面导航的两种方式
  • 声明式导航

    • 在页面上声明一个 <navigator> 导航组件
    • 通过点击 <navigator> 组件实现页面跳转
  • 编程式导航

    • 调用小程序的导航 API,实现页面的跳转

导航到tabBar页面:

<navigator url="必须以/开头" open-type="switchTab"></navigator>

API:wx.switchTab()

导航到非tabBar页面:

<navigator url="必须以/开头" open-type="navigate"></navigator>

API:wx.navigateTo()

后退导航:

<navigator open-type="navigateBack" delta="1"></navigator>

API:wx.navigateBack()

什么是wxs

  • WXS (WeiXin Script) 是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构
  1. wxs 的应用场景

    • wxml 中无法调用在页面的 .js 中定义的函数,但是 ,wxml 中可以调用 wxs 中定义的函数,因此,小程序中 wxs典型应用场景 就是 过滤器

启用下拉刷新:

json文件的window中将enablePullDownRefresh设置为true
json的backgroundColor是下拉窗口背景颜色
json的backgroundTextStyle配置下拉loading的样式:dark和light

监听用户下拉:在js中:
onPullDownRefresh:function(){

  //当操作完毕调用次函数,关闭下拉刷新的效果
  wx.stopPullDownRefresh()
}
监听上拉触底:js中:
onReachBottom:function(){}

在json中通过onReachBottomDistance配置距离,默认50px

loading提示api:

开启
wx.showLoading({
  title:'数据加载中'
})
隐藏
wx.hideLoading()

配置网络请求

由于平台的限制,小程序项目中不支持 axios,而且原生的 wx.request() API 功能较为简单,不支持拦截器等全局定制的功能。因此,建议在 uni-app 项目中使用 @escook/request-miniprogram 第三方包发起网络数据请求。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容

  • 夜莺2517阅读 127,720评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,896评论 1 6
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,536评论 28 53
  • 兔子虽然是枚小硕 但学校的硕士四人寝不够 就被分到了博士楼里 两人一间 在学校的最西边 靠山 兔子的室友身体不好 ...
    待业的兔子阅读 2,603评论 2 9