(轉(zhuǎn))微信小程序-開(kāi)發(fā)經(jīng)驗(yàn)總結(jié)---(基礎(chǔ)重點(diǎn))

微信小程序-開(kāi)發(fā)經(jīng)驗(yàn)總結(jié)---(基礎(chǔ)重點(diǎn))
2017年02月18日 08:47:00
閱讀數(shù):3841
總結(jié)

1:傳參肖油,方法判斷

js中 方法中可以傳遞一個(gè)方法作為形參,在java中是不可以的瘪菌。比如start項(xiàng)目中的

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

這里就是傳遞一個(gè)形參瘦陈,cb的方法,并且這里還有一個(gè)很巧妙的判斷方法

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

利用的&&的運(yùn)算規(guī)律昆烁,首先判斷cb是不是一個(gè)方法赤炒, 這里的==可以作為類(lèi)型是否相當(dāng)?shù)呐袛嗦任觯缓笤?amp;&中如果前面的不滿(mǎn)足,后面的則不會(huì)執(zhí)行可霎;如果是cb是一個(gè)方法魄鸦,調(diào)用cb方法,并且傳入success成功回調(diào)的userinfo參數(shù)

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

2:log打印

log的打印旷余,如果直接打印“”+變量 是不可以的绢记,因?yàn)槿思覜](méi)有toString()方法

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

所以只能分開(kāi)打印

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

3: json取對(duì)象

json的使用,可以通過(guò) json["key"]來(lái)取其子對(duì)象

 person: {
      name: "jafir",
      age: "11",
}

var name = person["name"];
var age = person["age"];
 info: {persons:[{name:"123",age:11},{name:"jafir1",age:12}]}
//如果有數(shù)組 通過(guò)這種方法獲取
 console.log(that.data.info["persons"][1].name)
 console.log(that.data.info["persons"][1].age)

4:定義boolean類(lèi)型值

要注意如果在page的data中要定義一個(gè)boolean類(lèi)型的值正卧,必須是 isSuccess : true而不是 isSuccess :"true"

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

因?yàn)槿绻莍sSucees : "true" ,結(jié)果為true蠢熄,沒(méi)問(wèn)題
但是如果是isSucess:"false",結(jié)果依舊為true炉旷,
因?yàn)檫@里的isSuccess不是boolean签孔,而是一個(gè)非空類(lèi)型,既然非空窘行,if就是為true
如果饥追,默認(rèn)undefined,if則為false

5:使用"that"

建議在 page{}外面定義一個(gè)that變量罐盔,然后在onLoad中賦值為this但绕,以后所有的地方,都可以使用that,這樣就避免有些地方惶看,this并不是指向page的上下文對(duì)象

//上下文對(duì)象
var that;
page({
 onLoad: function (options) {
    // 頁(yè)面初始化 options為頁(yè)面跳轉(zhuǎn)所帶來(lái)的參數(shù)
    that = this;
 }

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

6:page的生命周期方法

只有onload中有options參數(shù)捏顺,可以獲取頁(yè)面?zhèn)髦档鹊龋琽nload只會(huì)執(zhí)行一次
但是onShow可以每次切換頁(yè)面的時(shí)候執(zhí)行纬黎,所以幅骄,需要每次刷新頁(yè)面的數(shù)據(jù)請(qǐng)求,可以放在onShow中本今,測(cè)試過(guò)昌执,性能體驗(yàn)基本無(wú)影響
page的生命周期沒(méi)有Android那么豐富,頁(yè)面之間傳值也有一定的限制诈泼。
可以通過(guò)普通的url的傳值方式傳值懂拾,xxx?key = value ,但是要注意:我們傳的值其實(shí)是相當(dāng)于字符串和url拼接在一起铐达,請(qǐng)不要直接傳一個(gè)對(duì)象,因?yàn)閷?duì)象沒(méi)有toString方法岖赋。
傳遞json對(duì)象的步驟為:
把json對(duì)象變成字符串,如果本身就是那就直接用瓮孙,如果是json對(duì)象唐断,需要 parseString(json)
和url進(jìn)行參數(shù)拼接?key=value
取得時(shí)候在onload的options里面取出杭抠,
onLoad: function (options) {
var value= options.key
}
然后JSON.stringify(value)轉(zhuǎn)為json對(duì)象使用
7: 頁(yè)面間跳轉(zhuǎn)

從主頁(yè)跳轉(zhuǎn)一個(gè)新的界面 新界面處理完邏輯 成功與否 結(jié)束之后怎么通知 主頁(yè)結(jié)果脸甘?
這種情況,一般是沒(méi)有辦法解決的偏灿。經(jīng)過(guò)測(cè)試丹诀,如果你想要從二級(jí)非主頁(yè)界面直接navigator打開(kāi)主頁(yè),是不行的,會(huì)報(bào)錯(cuò)铆遭。
所以硝桩,我們采用的策略是:二級(jí)界面處理完數(shù)據(jù)之后,直接返回枚荣,然后在主頁(yè)界面重新拉取數(shù)據(jù)碗脊。所以會(huì)出現(xiàn),我們的請(qǐng)求接口是在onShow方法里面執(zhí)行的橄妆。因?yàn)閛nload只會(huì)執(zhí)行一次

8:wxml

text標(biāo)簽可以使用bindtap
<image src="{{logoUrl?logoUrl:'../../img/paihao.png'}}"></image>
可以使用這種方式來(lái)顯示默認(rèn)的圖片
再?gòu)?qiáng)調(diào)一下 在標(biāo)簽中使用data-xx-oo ="value",在對(duì)應(yīng)對(duì)象中可以通過(guò)e.currentTarget.dataset.xxOo獲得衙伶,這里的xx-oo ,-其實(shí)是會(huì)轉(zhuǎn)義駝峰害碾。這種一般使用場(chǎng)景為 你可以給你所點(diǎn)擊或者綁定事件的view設(shè)置一個(gè)數(shù)據(jù)矢劲,比如你一個(gè)picker里面有5個(gè)view,就可以綁定每個(gè)view不同的值,在觸發(fā)事件的時(shí)候取到相應(yīng)的值
如果你想要顯隱view你可以通過(guò)wx:if="true/false"來(lái)處理蛮原,但是這樣的話(huà)卧须,如果為false,page不會(huì)去渲染這個(gè)view,它所在的位置空間也不會(huì)預(yù)留儒陨,假如下面的view就會(huì)往上排花嘶。如果想要留存它的位置空間,可以修改其style樣式來(lái)解決
style="visibility:{{isShow?'visible':'hidden'}}"
9:統(tǒng)一網(wǎng)絡(luò)請(qǐng)求處理結(jié)果

你可以封裝一下網(wǎng)絡(luò)請(qǐng)求的返回結(jié)果蹦漠,做統(tǒng)一處理

requestWithGet: function(paramsData) {
  data.method = 'GET'
  this.requestInternal(paramsData)
},
requestWithPost: function(paramsData) {
  data.method = 'POST'
  this.requestInternal(paramsData)
},
requestInternal: function (paramsData) {
  var that = this;
  console.log('requestInternal: 開(kāi)始請(qǐng)求接口[' + paramsData.url + ']');
  //開(kāi)始網(wǎng)絡(luò)請(qǐng)求
  wx.request({
    url: paramsData.url,
    data: paramsData.data,
    method: paramsData.method,
    success: function (res) {
      console.log('requestInternal: 接口請(qǐng)求成功[' + paramsData.url + ']');
      paramsData.success(res);
    },
    fail: function (res) {
      console.log('requestInternal: 接口請(qǐng)求失敗[' + paramsData.url + ']');
      console.log(res);
      ////在這里做請(qǐng)求失敗的統(tǒng)一處理
      wx.showToast({
        title: '網(wǎng)絡(luò)訪(fǎng)問(wèn)失敗',
        duration: 1500
      })
      typeof paramsData.fail == "function" && paramsData.fail(res);
    },
    complete: function (res) {
//在這里做完成的統(tǒng)一處理
      typeof paramsData.complete == "function" && paramsData.complete(res);
    }
  })
}

這樣在使用請(qǐng)求的時(shí)候椭员,可以直接先wx.request({}) 這樣,就可以IDE給你聯(lián)想生成對(duì)應(yīng)的請(qǐng)求格式笛园,然后直接把“wx.request” 替換 “requestWithGet”或者“requestWithPost”就OK了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末隘击,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子研铆,更是在濱河造成了極大的恐慌埋同,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棵红,死亡現(xiàn)場(chǎng)離奇詭異凶赁,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)逆甜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)虱肄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人交煞,你說(shuō)我怎么就攤上這事咏窿。” “怎么了素征?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵集嵌,是天一觀(guān)的道長(zhǎng)萝挤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)纸淮,這世上最難降的妖魔是什么平斩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任亚享,我火速辦了婚禮咽块,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘欺税。我一直安慰自己侈沪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布晚凿。 她就那樣靜靜地躺著亭罪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歼秽。 梳的紋絲不亂的頭發(fā)上应役,一...
    開(kāi)封第一講書(shū)人閱讀 50,021評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音燥筷,去河邊找鬼箩祥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛肆氓,可吹牛的內(nèi)容都是我干的袍祖。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谢揪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蕉陋!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起拨扶,我...
    開(kāi)封第一講書(shū)人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凳鬓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后患民,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體缩举,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年酒奶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚁孔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惋嚎,死狀恐怖杠氢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情另伍,我是刑警寧澤鼻百,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布绞旅,位于F島的核電站,受9級(jí)特大地震影響温艇,放射性物質(zhì)發(fā)生泄漏因悲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一勺爱、第九天 我趴在偏房一處隱蔽的房頂上張望晃琳。 院中可真熱鬧,春花似錦琐鲁、人聲如沸卫旱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)顾翼。三九已至,卻和暖如春奈泪,著一層夾襖步出監(jiān)牢的瞬間适贸,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工涝桅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拜姿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓苹支,卻偏偏與公主長(zhǎng)得像砾隅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子债蜜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容