摘要:微信小程序的一種框架簡述由于項目原因,我于兩個多月前轉到微信端用進行開發。事件發起組件的所有祖先組件會依次接收到事件。注意,如果用了自定義事件,則中對應的監聽函數不會再執行。
wepy——微信小程序的一種框架 簡述
由于項目原因,我于兩個多月前轉到微信端用wepy進行開發。
wepy開發風格接近于 Vue.js,支持組件 Props 傳值,自定義事件、組件分布式復用Mixin、Redux、計算屬性函數computed、模板內容分發slot等等,支持ES6/7部分語法以及less/sass等樣式語言。
wepy官方文檔地址:wepy官方文檔
wepy的基本用法我就不再贅述,請自行看官方文檔。
值得一提的是初學者記得在微信開發者工具的項目設置中如下配置,否則很可能項目報錯無法運行
屬性 | 描述 | 如何觸發 |
---|---|---|
onLaunch | 監聽小程序初始化 | 當小程序初始化完成后觸發,可理解為清空后臺運行程序后打開小程序時觸發 |
onShow | 監聽小程序顯示 | 當小程序初始化后,或從后臺切換到前臺后觸發(后臺切換到前臺后面會詳細說明) |
onHide | 監聽小程序隱藏 | 當小程序從前臺切換到后臺時(前臺切換到后臺后面會詳細說明) |
1 onLaunch: 用戶打開小程序
2 onShow:初始化結束或用戶曾在后臺運行小程序,現在又打開了小程序
3 onHide:用戶切換到其他應用(小程序在后臺運行)
屬性 | 描述 | 如何觸發 |
---|---|---|
onLoad | 監聽頁面加載 | 當某頁面首次加載時觸發,每個頁面只觸發一次 |
onReady | 監聽頁面初次渲染完成 | 當頁面加載并渲染完成后觸發,每個頁面觸發一次 |
onShow | 監聽頁面顯示 | 一般在onLoad執行后執行,可以執行多次,當前頁面一旦顯示便會執行 |
onHide | 監聽頁面隱藏 | 當小程序變為后臺運行或跳轉到其他頁面時觸發 |
onUnload | 監聽頁面卸載 | 當小程序從前臺切換到后臺時(前臺切換到后臺后面會詳細說明) |
1 onLoad: 用戶初次打開某頁面,每個頁面只觸發一次
2 onShow:頁面一旦顯示即觸發,包括用戶來回切換頁面
3 onReady:頁面初次渲染完成,每個頁面只觸發一次
4 onHide:小程序被切換到后臺運行或者用戶切換到其他頁面
5 onUnload: 當使用重定向方法wx.redirectTo(OBJECT)或關閉當前頁返回上一頁wx.navigateBack(),觸發onUnload。
Template:
Plus
JavaScript:
goodsChange(data, status) { // doSomething }
注意 事件函數要寫在methods里
三、Watcher監聽器
example:
watch = { someName(newValue, oldValue) { // doSomething } }
someName為被監聽的某數據
newValue為新值,oldValue為舊值
someName一旦變化即觸發該函數
監聽函數需要寫在watch屬性里
四、組件通信方法
組件有三種通信方法
$broadcast:由父組件發起,所有子組件都會收到此廣播事件,除非事件被手動取消。
如果Page_Index組件發起一個$broadcast事件,那么按先后順序采用廣度優先遍歷依次接收到該事件的組件為:
ComA、ComB、ComC、ComD、ComE、ComF、ComG、ComH
$emit:與$broadcast正好相反,事件是向上傳遞的。
事件發起組件的所有祖先組件會依次接收到$emit事件。
如下圖所示,如果組件ComE發起一個$emit事件,那么接收到事件的先后順序為:組件ComA、頁面Page_Index。
$invoke:是一個頁面或組件對另一個組件中的方法的直接調用。
通過傳入組件相對路徑找到相應的組件,然后再調用其方法。
比如Page_Index組件中想要調用ComA組件中的一個名為someMethod方法的事件
this.$invoke("ComA", "someMethodInComA", "someArguments");
再比如再組件ComA中調用組件ComG的某個方法
this.$invoke("./../ComB/ComG", "someMethodInComG", "someArguments")
注意路徑為相對路徑
組件有兩種通信方式
默認通信方式
exapmle using $emit:
super
// events對象中所聲明的函數為用于監聽組件之間的通信與交互事件的事件處理函數 events = { "some-event": (p1, p2, p3, p4, $event) => { console.log($event) // 打出觸發some-event的事件對象 console.log(p1, p2, p3, p4) } };
sub
methods = { selectType(data) { // 子組件中的某點擊事件 this.$emit("some-event", 1, 2, 3, 4) // 向父組件的some-event監聽事件發送參數 } };
自定義通信方式(1.48版本新增方式,注意兼容問題)
example:
@customEvent.user="myFn"
@表示時間修飾符
customEvent表示事件名稱
.user表示事件后綴,共有三種
@tap.default: 綁定小程序冒泡型事件,.default后綴可省略不寫
可以理解為普通的原生冒泡機制
example:
this is a Concentric circle
methods = { centerView(data) { console.log("center-view has benn taped") }, middleView() { console.log("middle-view has been taped") }, wrapperView() { console.log("wrapper-view has been taped") } };
輸出是這樣的
@tap.stop:綁定小程序捕獲型事件
可以理解為原生js的阻止冒泡機制e.stopPropagation()/e.cancelBubble = true
example:
this is a Concentric circle
methods = { centerView(data) { console.log("center-view has benn taped") }, middleView() { console.log("middle-view has been taped") }, wrapperView() { console.log("wrapper-view has been taped") } };
輸出是這樣的
可以理解為tap.stop是在tap.default函數末尾添加了以下代碼
e.stopPropagation() // w3c規定的阻止冒泡機制 e.cancelBubble = true // ie的阻止冒泡機制
@eventName.user:綁定用戶自定義組件事件,通過$emit觸發。
注意,如果用了自定義事件,則events中對應的監聽函數不會再執行。
example:
In parentNode
methods = { selectTypeInParentNode(data) { console.log("in methods") console.log(data) // do something } } events = { "change": (data) => { console.log("in events") console.log(data) } }
In childNode
methods = { selectTypeInChildNode(data) { this.$emit("change", data) // 會調用父組件中的組件的@change屬性所指的事件函數 // 而非調用父組件events里面的監聽事件 } }
自定義方式輸出
兩種方式的區別
默認冒泡方式
in parentNode
events = { "change": (data) => { console.log("in events") console.log(data) } }
in childNode
selectType(data) { console.log("center-view has benn taped") this.$emit("change", data) },
printf
自定義方式可以看上面詳細說明
printf
五、組件化和Props傳值此處以動態傳值為例
父組件中
methods = { async goodsSelectChange(data, status) { // 傳遞給子組件的函數 // doSomething },
子組件中
+
props = { // 接收父組件傳遞下來的數據 parentToChildData: {} }; methods = { goodsChange(data, status) { this.$emit("parentToChildFunction", data, status) // $emit為向上傳值,具體可參考官方文檔的組件傳值 // 給父組件的parentToChildFunction屬性的函數(goodsSelectChange)傳遞參數(data,status) } };本文參考
WePY 讓小程序支持組件化開發的框架
WePY 生命周期
基于微信小程序的在線商城
謝謝本文章內容有任何問題請留言提問,若有錯誤歡迎糾正 本人郵箱 xbc18304999858@gmail.com
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/98846.html
摘要:,至此咱們的微信小程序的簡單使用及了解算是分享完了,畢竟個人也是道行有限,沒有鉆研太深,這些只是本人在實際項目開發過程中用到和總結的經驗,有太多不足或不對的地方,希望大家多多給予指出與改正,咱們一起來共同學習與進步 微信小程序是一種不需要下載安裝即可使用的應用,在國內它在企業推廣中的受歡迎度以及就這兩年的使用及普及熱度,然而就是因為它的備受歡迎度以及越來越被企業所重視,也就形成了咱們開...
摘要:,至此咱們的微信小程序的簡單使用及了解算是分享完了,畢竟個人也是道行有限,沒有鉆研太深,這些只是本人在實際項目開發過程中用到和總結的經驗,有太多不足或不對的地方,希望大家多多給予指出與改正,咱們一起來共同學習與進步 微信小程序是一種不需要下載安裝即可使用的應用,在國內它在企業推廣中的受歡迎度以及就這兩年的使用及普及熱度,然而就是因為它的備受歡迎度以及越來越被企業所重視,也就形成了咱們開...
摘要:,至此咱們的微信小程序的簡單使用及了解算是分享完了,畢竟個人也是道行有限,沒有鉆研太深,這些只是本人在實際項目開發過程中用到和總結的經驗,有太多不足或不對的地方,希望大家多多給予指出與改正,咱們一起來共同學習與進步 微信小程序是一種不需要下載安裝即可使用的應用,在國內它在企業推廣中的受歡迎度以及就這兩年的使用及普及熱度,然而就是因為它的備受歡迎度以及越來越被企業所重視,也就形成了咱們開...
摘要:四最后一點點感悟本文總結的比較淺顯很多地方說的也不是太詳細歡迎大家留言一起交流探討堅持學習不斷探索總結路漫漫其修遠兮吾將上下而求索參考資料官方文檔微信小程序官網開發文檔官方開發文檔 一、微信小程序wepy框架簡介: 微信小程序WePY框架是騰訊官方推出來的框架,類似的框架還有美團的mpvue,京東的Taro等; 目前公司開發小程序主要用到的是微信原生方法和官方的wepy框架; wepy...
閱讀 1246·2021-09-04 16:41
閱讀 2403·2021-09-02 10:18
閱讀 917·2019-08-29 16:40
閱讀 2614·2019-08-29 16:14
閱讀 898·2019-08-26 13:41
閱讀 1299·2019-08-26 12:24
閱讀 731·2019-08-26 10:24
閱讀 2869·2019-08-23 17:54