1. 程式人生 > >使用minapp 的小程式全域性資料同步問題

使用minapp 的小程式全域性資料同步問題

使用了一段時間的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);
}

 如有錯誤,請指正! 非常感謝!