首頁  >  文章  >  微信小程式  >  微信小程式開發經驗整理總結

微信小程式開發經驗整理總結

高洛峰
高洛峰原創
2017-03-10 16:13:541620瀏覽

這篇文章主要介紹了微信小程式開發經驗整理總結開發經驗整理的相關資料,需要的朋友可以參考下

微信小程式開發經驗整理

前言:

最近小程式出來了,公司也要求我們開發一款小程式。

於是,就開始著手做了,做了差不多一週吧,也遇到了很多問題,這裡就來總結一下。 (主要是從一個Android開發者的角度來述說的,可能比較零碎的一些知識點和經驗,如果大家還有補充,歡迎)

總結

#1:傳參,方法判斷

js中方法中可以傳遞一個方法作為形參,在java中是不可以的。例如專案中的

getUserInfo:function(cb){
 var that = this
 if(this.globalData.userInfo){
  typeof cb == "function" && cb(this.globalData.userInfo)
 }else{
  //调用登录接口
  wx.login({
   success: function () {
    wx.getUserInfo({
     success: function (res) {
      that.globalData.userInfo = res.userInfo
      typeof cb == "function" && cb(that.globalData.userInfo)
     }
    })
   }
  })
 }
},

這裡就是傳遞一個形參,cb的方法,而這裡還有一個很巧妙的判斷方法

typeof cb == "function" && cb(that.globalData.userInfo)

利用的&&的運算規律,首先判斷cb是不是一個方法, 這裡的==可以作為類型是否相當的判斷,然後在&&中如果前面的不滿足,後面的則不會執行;如果是cb是方法,呼叫cb方法,傳入success成功回呼的userinfo參數

還有一點,if(this.globalData.userInfo) 可以作為是否為null的判斷條件,在java中不可以。

2:log印

log的列印,如果直接列印「」+變數是不可以的,因為人家沒有toString()方法

X console.log("info"+info);

所以只能分開列印

console.log("info");
console.log(info);

3: json取物件

json的使用,可以透過json["key"]來取其子物件

person: {
   name: "jafir",
   age: "11",
}
var name = person["name"];
var age = person["age"];

info: {persons:[{name:"123",age:11},{name:"jafir1",age:12}]}
//如果有数组 通过这种方法获取
 console.log(that.data.info["persons"][1].name)
 console.log(that.data.info["persons"][1].age)

## 4:定義boolean型別值

要注意如果在page的data中要定義一個boolean型別的值,必須是isSuccess : true而不是isSuccess :"true"

#

if (this.data.isSccess) {
   console.log("true")
  } else {
   console.log("false")
  }

因為如果是isSucees : "true" ,結果為true,沒問題,但是如果是isSucess:"false",結果依舊為true,


#因為這裡的isSuccess不是boolean,而是非空型,既然非空,if就是為true


如果,預設undefined,if則為false

5:使用"that"

建議在page{}外面定義一個that變量,然後在onLoad中賦值為this,以後所有的地方,都可以使用that,這樣就避免有些地方,this並不是指向page的上下文對象

//上下文对象
var that;
page({
 onLoad: function (options) {
  // 页面初始化 options为页面跳转所带来的参数
  that = this;
 }

...
that.setData({
    xxx: xxx,
   })
})

6:page的生命週期方法

  1. #只有onload中有options參數,可以取得頁面傳值等等, onload只會執行一次

  2. 但是onShow可以每次切換頁面的時候執行,所以,需要每次刷新頁面的資料請求,可以放在onShow中,測試過,效能體驗基本上無影響

  3. page的生命週期沒有Android那麼豐富,頁面之間傳值也有一定的限制。

  4. 可以透過普通的url的傳值方式傳值,xxx?key = value ,但是要注意:我們傳的值其實是相當於字串和url拼接在一起,請不要直接傳一個物件,因為物件沒有toString方法。

傳遞json物件的步驟為:

1.把json物件變成字串,如果本身就是那就直接用,如果是json對象,需要parseString (json)


2.和url進行參數拼接? key=value


3.取得時候在onload的options裡面取出,


onLoad: function (options) {
var value= options.key
}

然後JSON.stringify( value)轉為json物件使用


7: 頁間跳轉

#從主頁跳轉一個新的介面新介面處理完邏輯成功與否結束後怎麼通知主頁結果?

這種情況,一般是沒有辦法解決的。經過測試,如果你想要從二級非主頁介面直接navigator打開主頁,是不行的,會報錯。

所以,我們採用的策略是:二級介面處理完資料之後,直接返回,然後在主頁介面重新拉取資料。所以會出現,我們的請求介面是在onShow方法裡面執行的。因為onload只會執行一次

8:wxml

1.text標籤可以使用bindtap


<image src="{{logoUrl?logoUrl:&#39;../../img/paihao.png&#39;}}"></image>



##可以使用這種方式來顯示預設的圖片#########3.再強調一下在標籤中使用data-xx-oo ="value",在對應物件中可以透過e.currentTarget.dataset. xxOo獲得,這裡的xx-oo ,-###其實是會轉義駝峰。 ###這種一般使用場景為你可以給你所點擊或綁定事件的view設定一個數據,比如你一個picker裡面有5個view,就可以###綁定每個view不同的值,在觸發事件的時候會取到對應的值#########

4.如果你想要显隐view你可以通过wx:if="true/false"来处理,但是这样的话,如果为false,page不会去渲染这个view,它所在的位置空间也不会预留,假如下面的view就会往上排。如果想要留存它的位置空间,可以修改其style样式来解决

style="visibility:{{isShow?&#39;visible&#39;:&#39;hidden&#39;}}"

9:统一网络请求处理结果

你可以封装一下网络请求的返回结果,做统一处理

requestWithGet: function(paramsData) {
 data.method = &#39;GET&#39;
 this.requestInternal(paramsData)
},
requestWithPost: function(paramsData) {
 data.method = &#39;POST&#39;
 this.requestInternal(paramsData)
},
requestInternal: function (paramsData) {
 var that = this;
 console.log(&#39;requestInternal: 开始请求接口[&#39; + paramsData.url + &#39;]&#39;);
 //开始网络请求
 wx.request({
  url: paramsData.url,
  data: paramsData.data,
  method: paramsData.method,
  success: function (res) {
   console.log(&#39;requestInternal: 接口请求成功[&#39; + paramsData.url + &#39;]&#39;);
   paramsData.success(res);
  },
  fail: function (res) {
   console.log(&#39;requestInternal: 接口请求失败[&#39; + paramsData.url + &#39;]&#39;);
   console.log(res);
   ////在这里做请求失败的统一处理
   wx.showToast({
    title: &#39;网络访问失败&#39;,
    duration: 1500
   })
   typeof paramsData.fail == "function" && paramsData.fail(res);
  },
  complete: function (res) {
//在这里做完成的统一处理
   typeof paramsData.complete == "function" && paramsData.complete(res);
  }
 })
}

这样在使用请求的时候,可以直接先wx.request({}) 这样,就可以IDE给你联想生成对应的请求格式,然后直接把“wx.request” 替换 “requestWithGet”或者“requestWithPost”就OK了

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

以上是微信小程式開發經驗整理總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn