使用minapp 的小程式全域性資料同步問題
阿新 • • 發佈:2018-12-28
使用了一段時間的ts,感覺使用js有點不順手;所以就找到了minapp,來開發微信小程式;
資料同步:
在common下新建event.ts;(在src下新建一個common的資料夾,用於存放公共的方法);
class Event { /**事件列表*/ private eventList = <any>{}; /** * 傳送事件 * @type 事件型別 * @args 攜帶資料 */ public sendEvent(type: string, ...args: any[]) { let arr: Array<any> = this.eventList[type]; if (arr != null) { let len = arr.length; let listen: Function; let thisObject: any; for (let i = 0; i < len; i++) { let msg = arr[i]; listen = msg[0]; thisObject = msg[1]; listen.apply(thisObject, args); } } } /** * 監聽事件 * @type 事件型別 * @listener 回撥函式 * @thisObject 回撥執行物件 */ public addEvent(type: string, listener: Function, thisObject: any) { let arr: Array<any> = this.eventList[type]; if (arr == null) { arr = []; this.eventList[type] = arr; } else { let len = arr.length; for (let i = 0; i < len; i++) { if (arr[i][0] == listener && arr[i][1] == thisObject) { return; } } arr.push([listener, thisObject]); } /** * 移除事件 * @type 事件型別 * @listener 回撥函式 * @thisObject 回撥執行物件 */ public removeEvent(type: string, listener: any, thisObject: any) { let arr: Array<any> = this.eventList[type]; if (arr != null) { let len = arr.length; for (let i = len - 1; i >= 0; i--) { if (arr[i][0] == listener && arr[i][1] == thisObject) { arr.splice(i, 1); } } if (arr && arr.length == 0) { this.eventList[type] = null; delete this.eventList[type]; } } } export const $Event = new Event();
具體使用:
釋出事件:
在你需要釋出的頁面ts中引入event.ts;
import { $Event } from 'common/event';
比如說在請求成功以後去釋出事件;
$Event.sendEvent('like', { id: this.data.articalId });//這邊傳id
監聽事件:
在你需要的頁面ts中 引入event.ts
import { $Event } from 'common/event'; async onLoad(options:any){ //監聽事件 $Event.addEvent("like", (e: any) => { //取id的話就是e.id; this.setRecommendLike(e); //接收到引數進行的操作; }, this); }
移除監聽事件:
onUnload() { $Event.removeEvent("like", (e: any) => { console.log(e, '移除監聽事件') }, this); $Event.removeEvent("comment", (e: any) => { console.log(e, '移除監聽評論數量事件') }, this); $Event.removeEvent("forward", (e: any) => { console.log(e, '移除監聽轉發數量事件') }, this); $Event.removeEvent("fansCount", (e: any) => { console.log(e, '移除關注事件') }, this); }
如有錯誤,請指正! 非常感謝!