import createPage from "grace/index.js" createPage({ data:{ userInfo:{}, canIUse:true } onLoad(){ //直接通過$data賦值更新數據 this.$data.canIUse=false //通過$http發(fā)起網絡請求 this.$http.post("http://www.dtworkroom.com/doris/1/2.0.0/test",{xx:7}).then((d)=>{ console.log(d) }).catch(err=>{ console.log(err.status,err.message) }) //全局事件總線-監(jiān)聽事件 this.$bus.$on("enventName",(data)=>{ console.log(data) }) //返回上一頁,并傳遞數據 this.$goBack({retValue:"8"}) }, //跨頁面?zhèn)髦? $onBackData(data){ //接收頁面返回的數據, } ... }) 注意:Grace 所有方法和屬性命名都以“$”開始。數據響應式微信小程序中數據發(fā)生變化后都要通過setData顯式更新如: //更新單個字段 this.setData({ userInfo: res.userInfo }) //更新多個字段 this.setData({ userInfo: res.userInfo canIUse: false }) 這很明顯是受了React的影響,好的不學??,如果你用過Vue, 你應該會覺得這看起來很不優(yōu)雅,尤其是代碼中零零散散要更新的值多的時候,代碼看起來會很冗余,還有,有時為了改變一個變量,也得調一次 setData . 現(xiàn)在,有了Grace, 它會讓你的代碼變的優(yōu)雅,你可以像使用Vue一樣更新數據: this.$data.userInfo=res.userInfo; //更新多個字段,并非重新賦值 this.$data={ userInfo: res.userInfo canIUse: false } 現(xiàn)在,你可以直接通過賦值就能更新界面了。當然,您依舊可以使用 this.setData 來更新數據,grace會自動同步 this.$data . 注意事項grace的數據響應式原理和Vue是一樣的,(如果你熟悉Vue,可以跳過),所以,和Vue一樣,由于 JavaScript 的限制,grace不能檢測到數組下標賦值和對象添加或刪除屬性。但grace提供了 $set(target,key,value) 方法, 詳情請移步: github.com/wendux/grac… 。 數據變更緩存根據微信小程序官方優(yōu)化建議,grace可以避免如下問題:
HttpGrace通過Promise封裝了wx.request, 并支持攔截器、請求配置等:
Grace使用的http請求庫是 FLY , $http 是 FLY 的一個實例,詳情可以參照其官網,如果您想創(chuàng)建新的 FLY 示例: var newHttp=this.$creatHttpClient(); 事件總線全局事件總線可以在全局(跨頁面)觸發(fā)、監(jiān)聽事件。 $on(eventName,handler)監(jiān)聽事件 this.$bus.$on("enventName",(arg1,arg2)=>{ //事件處理器參數為$emit觸發(fā)事件時傳遞的參數 console.log(arg1) }) $emit(eventName,[…arguments])觸發(fā)事件 this.$bus.$emit("enventName", 1,2) $off(eventName,[handler])取消監(jiān)聽 this.$bus.$off("eventName",cb) 當提供hanlder時,只將該hanlder移出監(jiān)聽者隊列,如果沒有傳handler,則清空該事件的監(jiān)聽者隊列。 跨頁面?zhèn)髦?/h2>在小程序中打開新頁面時可以通過url的query向新頁面?zhèn)髦?,這很容易,如: wx.navigateTo({ //傳遞id,在新頁面onLoad中獲取 url: 'test?id=1' }) 但是,新頁面關閉時如何向前一個頁面返回數據? 小程序中沒有提供直接的方法,grace給所有頁面添加了一個回調,用于接收頁面回傳的數據,如下: createPage({ data:{} $onBackData(data){ //接收頁面返回的數據, } ... }) 上面的頁面我們記為A, 假設你打開了一個新頁面B, 你需要在B中選擇一些信息后回傳給A,那么你在B中應該: createPage({ data: {}, bindViewTap(){ //返回上一個頁面,并回傳一些數據 this.$goBack({xxx:5}); } ... } $goBack([data],[delta])關閉當前頁面,返回上一頁面或多級頁面,如果存在 data , 則會調用返回到的頁面的 $onBackData 回調,若 data 不存在,則不會回調 $onBackData . delta 意義同 wx.navigateBack 參數的delta, 表示回退的頁面數,默認為1(上一頁),如果如果 delta 大于現(xiàn)有頁面數,則返回到首頁。 |