移動開發(fā)的頁間傳值方式
在移動開發(fā)過程中拦焚,這里以iOS原生開發(fā)為例,在整個開發(fā)中頁面間有多種傳值方式
- 屬性傳值
- Block傳值
- 代理傳值
- 單例傳值
- 通知傳值
- ...
主要是以上幾種傳值方式峦剔,來應(yīng)對一些復(fù)雜的業(yè)務(wù)邏輯
微信小程序的頁間傳值方式
微信小程序因?yàn)槭敲嫦蚬δ茌^為簡單的需求進(jìn)行開發(fā)(不排除以后會復(fù)雜起來),所以傳值的方式比較少
- 路徑傳值(官方推薦)
路徑傳值是目前看來微信官方給的最靠譜的傳值方式
例子
wx.navigateTo({
url: 'test?id=1'
})
//test.js 取值方式
Page({
onLoad: function(option){
console.log(option.query)
}})
- 公共屬性傳值(不推薦)
這個是我自己YY起的名字
對角钩,利用app.js
暴漏公共屬性進(jìn)行
// app.js 設(shè)定公共屬性
data: {
hl:"hello world!"
}
// test.js 取出公共屬性
var app = getApp()
console.log(app.hl);
然后通過onshow
方法判斷激活處理
- storage傳值(強(qiáng)烈不推薦)
這個比較好理解,放在storage的key-value,可以使用官方的api進(jìn)行“增刪改查”野舶。
然后通過onshow
方法判斷激活處理
缺陷
從上面微信小程序的頁間傳值方式中可以看到平道,微信小程序的傳值方式都是建立在被動傳值一屋,主動處理的基礎(chǔ)上的.
除了你以靜態(tài)變更變量后,主動在onload
或者onshow
中進(jìn)行主動喚醒處理方法闸衫,否則你沒有什么方法來進(jìn)行邏輯上的主動處理蔚出。
這樣會造成兩個問題:
- 代碼結(jié)構(gòu)錯亂和冗余
- 代碼耦合度高
以移動開發(fā)模式來解決問題
反觀虫腋,在移動開發(fā)中悦冀,各種傳值方式是為了滿足不同場景下的不同調(diào)用盒蟆,這樣可以靈活的解決不同場景下的不同需求。
- 實(shí)際場景分析
比如場景历等,用戶選擇啟動“夜間模式”寒屯,那么我們需要將整個app的主題更換為黑色主題,如果按照現(xiàn)有的方法浩螺,我們需要依依在onshow
中進(jìn)行判斷。
當(dāng)然這個例子并不完全正確鸳君,你也可以通過設(shè)置全局的css來進(jìn)行患蹂。
- 以通知模式來解決問題
昨天我發(fā)布了WxNotificationCenter - 微信小程序通知廣播模式類,降低小程序開發(fā)的耦合度,是借鑒iOS開發(fā)中的通知模式來實(shí)現(xiàn)。
主要就是實(shí)現(xiàn)主動注冊通知囱挑,然后分發(fā)通知后多處共同分別處理的解決方案平挑。
這種方案不一定是好的通熄,目前可能沒有很多微信小程序會用到,但是在處理不同邏輯過程中廊酣,需要我們?nèi)ニ伎家幌履欠N更加人性化和方便亡驰,來解決實(shí)際問題隐解。
WxNotificationCenter - 微信小程序通知廣播模式類,降低小程序開發(fā)的耦合度 解決的問題就是一對多诫睬,多觸發(fā)的主動技能帕涌。你可以實(shí)際看我在這個過程中的demo
https://github.com/icindy/WxNotificationCenter/blob/master/README.md
以移動端的思維來思考微信小程序
微信小程序本身就可以劃歸為移動開發(fā)范疇蚓曼,不管語法是怎么樣的纫版,如果有移動開發(fā)經(jīng)驗(yàn)的同學(xué)來說,將自己的移動端思維拿到微信小程序中加以使用癞己,可能效果會更好。
來源
首發(fā)地址http://weappdev.com/t/topic/236
微信小程序開發(fā)論壇 http://weappdev.com/
垂直微信小程序開發(fā)交流社區(qū)