微信小程序开发技巧总结

1.全局变量的使用

每个小程序都需要在 app.js 中调用 App 方法注册小程序示例,绑定生命周期回调函数、错误监听和页面不存在监听函数等。
详细的参数含义和使用请参考 App 参考文档

整个小程序只有一个 App 实例,是全部页面共享的。开发者可以通过 getApp 方法获取到全局唯一的 App 示例,获取App上的数据或调用开发者注册在 App 上的函数。

我们在做小程序的时候往往需要大量的请求,而请求的域名也都是相同的,我们可以把域名储存到全局变量中,这样会方便后面请求域名的修改。(user_id、unionid、user_info之类经常用到的都可以放在全局变量中)

//app.js
App({
 globalData: {
    user_id: null,
    unionid:null,
    url:"https://xxx.com/index.php/Home/Mobile/",      //请求的域名
    user_info:null
  }
})

当在页面中使用时记得要引用下app.js,小程序已经提供了方法

//index.js
//获取应用实例
const app = getApp()    //获取app
//let url = app.globalData.url;  //使用方法,可先定义或者直接使用app.globalData.url
wx.request({
    url: app.globalData.url + 'checkfirst',  //就可以直接在这里调用
    method:'POST',
    header:{"Content-Type":"application/x-www-form/"}
    data:{},
    success:(res)=>{}

2.箭头函数的使用

当我们调用接口请求时要通过请求返回的数据改变页面数据经常要用到临时指针来保存this指针。
但如果使用ES6的箭头函数就可以避免

使用临时指针
onLoad: function (options) {
    let that = this  //保存临时指针
    wx.request({
      url: url + 'GetCouponlist',
      method: 'POST',
      header: { 'Content-Type': 'application/x-www-form-urlencoded' },
      data: { },
      success(res) {
        that.setData({    //使用临时指针
          coupon_length:res.data.data.length
        })
      }
    })
使用ES6箭头函数 ( ) => {}
success:(res) => {
        this.setData({    //此时this仍然指向onLoad
          coupon_length:res.data.data.length
        })
      }

3.HTTP请求方法的封装

在小程序中http请求是很频繁的,但每次都打出wx.request是很烦的,而且代码也是冗余的,所以我们要把他封装起来
首先要在utils文件夹中新建一个js,我命名为request.js,在里面封装出post和get的请求,记得最后要声明出来

//封装请求
const app = getApp()
let host = app.globalData.url

/**
 * POST 请求
 * model:{
 *  url:接口
 *  postData:参数  {}
 *  doSuccess:成功的回调
 *   doFail:失败回调
 * }
 */
function postRequest(model) {
  wx.request({
    url: host + model.url,
    header: {
      "Content-Type": "application/x-www-form-urlencoded"
    },
    method: "POST",
    data: model.data,
    success: (res) => {
      model.success(res.data)
    },
    fail: (res) => {
      model.fail(res.data)
    }
  })
}

/**
 * GET 请求
 * model:{
 *   url:接口
 *   getData:参数 {}
 *   doSuccess:成功的回调
 *   doFail:失败回调
 * }
 */
function getRequest(model) {
  wx.request({
    url: host + model.url,
    data: model.data,
    success: (res) => {
      model.success(res.data)
    },
    fail: (res) => {
      model.fail(res.data)
    }
  })
}

/**
 * module.exports用来导出代码
 * js中通过 let call = require("../util/request.js")  加载
 */
module.exports = {
  postRequest: postRequest,
  getRequest: getRequest
}

这一步非常重要记得添加!

module.exports = {
postRequest: postRequest,
getRequest: getRequest
}

使用时就在相应的页面顶部调用,Page外部噢

let call = require("../../utils/request.js")

使用的时候↓

get
//获取广告图
    call.getRequest({
      url:'GetAd',
      success:(res)=>{      //箭头函数没有指针问题
        this.setData({
          urlItem: res.data
        })
      }
    })
post
call.postRequest({
      url: 'addorder',
      data: {
        shop_id: that.data.shop_id,
        user_id: app.globalData.user_id,
        coupon_sn: that.data.coupon_sn,
        carType: that.data.car_type,
        appointtime: that.data.toTime
      },
      success:(res)=>{
        console.log(res)
        wx.navigateTo({
          url: '../selectPay/selectPay?order_sn=' + res.data.order_sn + '&fee=' + res.data.real_pay + "&order_id=" + res.data.order_id,
        })
      }
    })

4.搜索input中,如何点击搜索按钮进行搜索及按钮样式修改

正常我们会在搜索框中加入一个搜索按钮,点击进行搜索,但是小程序不是操作dom的,所以是无法直接获取到input中的值,所以要通过另外的方法进行搜索。

(1)通过input组件中的bindconfirm属性(confirm-type="search" 可将软键盘的完成按钮改为“搜索”)

<input class='search_input' type='text' confirm-type='search'  bindconfirm='toSearch'  ></input>
//js部分
toSearch(e){
  console.log(e.detail.value)  //e.detail.value 为input框输入的值
}

(2)利用form表单的提交,来完成点击按钮的提交(input需要添加name属性)

搜索按钮

利用button代替form的表单提交(form-type="submit"),注意用view不行,必须用button
需要自己修改button的默认样式(button的边框要在button::after中修改)

//wxml部分
<form bindsubmit="formSubmit" bindreset="formReset">
  <input class='search_input' type='text' confirm-type='search' name="search" bindconfirm='toSearch'  >
  <button class='search_btn' form-type='submit'>搜索</button></input>
</form>
//js部分
formSubmit(e){
  console.log(e.detail.value.search)  //为输入框的值,input记得添加name属性
}

5.定时器的使用/清除,关闭页面的清除

设置定时器:setInterval(function,time),清除clearInterval(intervalName)
我们设置定时器的时候,需要在data里面设置,以便于全局清除
定时器在关闭页面的时候并不会清除,所以要监听页面的关闭,去清除定时器。监听页面卸载函数onUnload()

Page({

  /**
   * 页面的初始数据
   */
  data: {
    order_sn:null,
    interval:''
  }

设置定时器的时候

this.setData({
  interval : setInterval(() => {
          //业务逻辑
        }, 3000)
})

清除的时候

clearInterval(this.data.interval)

监听页面卸载时清除定时器

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

推荐阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 8,618评论 0 3
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,102评论 1 45
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,034评论 1 32
  • 版权声明:本文为博主原创文章,转载请注明出处【by:待孤君临天下】 前言:因项目需求,本人需要开发微信小程序(之前...
    待孤君临天下阅读 8,016评论 1 1
  • 今天跟大家分享一部国产电影电影叫做《你好,疯子》。 影片是从一个看上去像是荒废了很久的疯人院开始的。七个互不相识的...
    十神佑我阅读 662评论 0 4