摘要:目錄項目構建文件使用優(yōu)化之處組件通信的使用注意事項報錯記錄踩坑記錄項目構建官方文檔地址鏈接項目源碼地址鏈接項目資料地址鏈接簡單介紹是一個微信小程序框架,支持模塊化開發(fā),開發(fā)風格類似。使用的方式請求小程序原生都將化。
目錄
wepy項目構建
wepy文件使用
wepy優(yōu)化之處
wepy組件通信
wepy的API使用
wepy注意事項
wepy報錯記錄
wepy踩坑記錄
1. wepy項目構建官方文檔地址鏈接
項目源碼地址鏈接
項目資料地址鏈接
簡單介紹:wepy是一個微信小程序框架,支持模塊化開發(fā),開發(fā)風格類似Vue.js。可搭配redux使用,能同時打包出web和小程序。
全局安裝或更新WePY命令行工具
npm install -g wepy-cli
創(chuàng)建項目
wepy init standard my-project[項目名]
PS I:H5WeiXinProgram> wepy init standard wepy-demo ? Project name [wepy-demo] ? AppId [appid] ? Project description [A WePY project] ? Author [author] ? Use ESLint to lint your code? No ---選擇Yes,會對代碼格式校驗 ? Use Redux in your project? No ---選擇Yes,可以使用Redux框架語法,目錄會多出store目錄 ? Use web transform feature in your project? Yes ---選擇Yes會有index.template.html
切換至項目目錄
cd wepy-demo[項目目錄]
安裝依賴
npm install
開啟實時編譯
npm run dev
構建項目完整目錄2-wepy文件使用 1、app.wpy文件介紹
// template、style、script三大標簽,有l(wèi)ang、src屬性,當src屬性存在文件,那么其內部代碼會被忽略。 // app.apy小程序入口文件2、pages目錄下的文件介紹
// pages目錄下存放主頁面,代碼編寫與app.wpy相似,不同之處如下: // 因為app.wpy不需要template,但pages目錄下的頁面需要 // 在Pages下的頁面實例中,可以通過this.$parent來訪問App實例。 // Page頁面繼承自Component組件,即Page也是組件。除擴展了頁面所特有的config配置以及特有的頁面生命周期函數之外, 其它屬性和方法與Component一致。 --- 編譯成index.wxml文件,只有pages目錄下的template會編譯成wxml文件3、components目錄下的文件介紹---組件標簽
// components目錄下存放組件 // 頁面可以引入組件,而組件還可以引入子組件。4、mixins目錄下的文件介紹import wepy from "wepy" // 引入child組件文件 import Child from "../components/child";
// mixins是放混合組件的地方,用于復用不同組件中的相同功能。 // 例如:MyMixin.js import wepy from "wepy" export default class MyMixin extends wepy.mixin { //該處是wepy.mixin,且加上類名加以區(qū)分 } // mycom.js import MyMixin from "./mymixin"; export class MyCom extends wepy.component { mixins = [MyMixin]; }5、wepy.config.js文件介紹
// wepy.config.js是webpack配置文件 // 該文件可配置環(huán)境變量來改變運行時的參數 wpyExt: ".wpy", ---文件后綴名設置 eslint: false, ---關閉eslint校驗 resolve: { alias: { counter: path.join(__dirname, "src/components/counter"), "@": path.join(__dirname, "src") //配置文件路徑代碼 }, aliasFields: ["wepy", "weapp"], modules: ["node_modules"] },
官方指出鏈接需要在該文件下配置如下語句:
babel: { "presets": [ "env" ], "plugins": [ "transform-export-extensions", "syntax-export-extensions" ] }
官方指出鏈接
3-wepy優(yōu)化之處 1. wx.request 接收參數修改// 原生代碼: wx.request({ url: "xxx", success: function (data) { console.log(data); } }); // WePY 使用方式, 需要開啟 Promise 支持 wepy.request("xxxx").then((d) => console.log(d)); // async/await 的使用方式, 需要開啟 Promise 和 async/await 支持 async function request () { let d = await wepy.request("xxxxx"); console.log(d); }2. 優(yōu)化事件參數傳遞
// 原生的事件傳參方式:3.動態(tài)綁定classClick me! Page({ tapName: function (event) { console.log(event.currentTarget.dataset.id)// output: 1 console.log(event.currentTarget.dataset.title)// output: wepy console.log(event.currentTarget.dataset.other)// output: otherparams } }); // WePY 1.1.8以后的版本,只允許傳string。 // 事件響應以及組件通訊事件參數順序調整,將$event移至末尾,即最后一個參數為事件參數。Click me! methods: { tapName (id, title, other, event) { console.log(id, title, other)// output: 1, wepy, otherparams } } // 蒙層彈窗出現與隱藏... ... data = { flags: { layerRule: true, layerPrize: true, ... } } //出現 showLayer (e,layerName) { let key = layerName.currentTarget.dataset.wpyshowlayerA; //優(yōu)化data-,此時dataset結點后的字段名框架自動生成, 為wpy + 函數名(小寫) + 大寫26個字母中的一個, 由于我上面只傳了一個參數,則此時e代表的就是此時傳的第一個參數名。 // 記住:最后一個才會是事件名,所有的事件都綁在最后一個參數上。 this.flags[key] = false; }, //消失 hideLayer (e,layerName) { let key = layerName.currentTarget.dataset.wpyhidelayerA; this.flags[key] = true; },
// 在vue中動態(tài)綁定class // 在wepy中,要使用微信原生的綁定語法4.新增interceptor攔截器// 其中 class-a 是不需要動態(tài)綁定的class, 雙括號中才是需要綁定的class
可以使用WePY提供的全局攔截器對原生API的請求進行攔截。
具體方法是配置API的config、fail、success、complete回調函數。參考示例:
import wepy from "wepy"; export default class extends wepy.app { constructor () { // this is not allowed before super() super(); // 攔截request請求 this.intercept("request", { // 發(fā)出請求時的回調函數 config (p) { // 對所有request請求中的OBJECT參數對象統一附加時間戳屬性 p.timestamp = +new Date(); console.log("config request: ", p); // 必須返回OBJECT參數對象,否則無法發(fā)送請求到服務端 return p; }, // 請求成功后的回調函數 success (p) { // 可以在這里對收到的響應數據對象進行加工處理 console.log("request success: ", p); // 必須返回響應數據對象,否則后續(xù)無法對響應數據進行處理 return p; }, //請求失敗后的回調函數 fail (p) { console.log("request fail: ", p); // 必須返回響應數據對象,否則后續(xù)無法對響應數據進行處理 return p; }, // 請求完成時的回調函數(請求成功或失敗都會被執(zhí)行) complete (p) { console.log("request complete: ", p); } }); } }4-wepy組件通信
組件傳值
// wepy.component基類提供$broadcast、$emit、$invoke三個方法用于組件之間的通信和交互 · $broadcast:父組件觸發(fā)所有子組件事件 · $emit:子組件觸發(fā)父組件事件 · $invoke:子組件觸發(fā)子組件事件 注意:可以以$標識符來獲取wepy框架內建屬性和方法。$name:String: 組件名稱。
$broadcast使用案例:
$broadcast事件是由父組件發(fā)起,所有子組件都會收到此廣播事件,除非事件被手動取消。事件廣播的順序為廣度優(yōu)先搜索順序。
// index.wpy(pages頁面) ---父組件---子組件標簽 // list.wpy(components頁面) ---子組件
$emit使用案例:
$emit與$broadcast正好相反,事件發(fā)起組件的所有祖先組件會依次接收到$emit事件。
下面通過這個例子來說明
// index.wpy(pages頁面) ---父組件// count.wpy(components頁面) ---子組件 測試組件 計數組件1: //自定義組件綁定事件使用.user,其中@表示事件修飾符, index-emit 表示事件名稱,.user表示事件后綴。 // 目前總共有三種事件后綴: // .default: 綁定小程序冒泡型事件,如bindtap,.default后綴可省略不寫; // .stop: 綁定小程序捕獲型事件,如catchtap; // .user: 綁定用戶自定義組件事件,通過$emit觸發(fā)。注意,如果用了自定義事件,則events中對應的監(jiān)聽函數不會再執(zhí)行。 計數組件2: {{num}}
$invoke使用案例:
$invoke是一個頁面或組件對另一個組件中的方法的直接調用,通過傳入組件路徑找到相應的組件,然后再調用其方法。
比如,想在頁面Page_Index中調用組件ComA的某個方法:
this.$invoke("ComA", "someMethod", "someArgs");
如果想在組件ComA中調用組件ComG的某個方法:
this.$invoke("./../ComB/ComG", "someMethod", "someArgs");5-wepy的API使用
wepy 封裝的屬性,可以獲取globalData、$wxapp等
1.$instance 全局實例封裝
//wepy.app Class //屬性 1.$wxapp:Object 等同于 getApp() 2.$pages:List6-wepy注意事項所有列表頁面 3.$interceptors:List
與Vue開發(fā)不同之處
1、methods方法使用不同:methods方法中只用于聲明頁面wxml中標簽的bind、catch事件,自定義方法需以自定義方法的方式聲明。 2、命名規(guī)范不同:template里面組件組件標簽命名使用駝峰式命名(即comChild),而不是短橫杠式命名(com-child)。 3、響應事件順序不同:對于組件methods響應事件,以及小程序頁面事件將采用兼容式混合, 即先響應組件本身響應事件,然后再響應混合對象(mixin)中響應事件。 注意,這里事件的執(zhí)行順序跟Vue中相反,Vue中是先執(zhí)行mixin中的函數, 再執(zhí)行組件本身的函數。 4、wepy中也有computed,props,slot,data,watch等vue中有的一些屬性(沒有filter, directive) props,slot,data,watch和vue基本無異,其中computed計算屬性是無法傳參的。 5、wepy中props傳遞需要加上.sync修飾符(類似VUE1.x)才能實現props動態(tài)更新, 并且父組件再變更傳遞給子組件props后要執(zhí)行this.$apply()方法才能更新。 關于props動態(tài)傳值,可以通過設置子組件props的twoWay: true來達到子組件數據綁定至父組件的效果。 那如果既使用.sync修飾符,同時子組件props中添加的twoWay: true時,就可以實現數據的雙向綁定了。 6、wepy支持數據雙向綁定,子組件在定義props時加上twoway:true屬性值即可實現子組件修改父組件數據。 7、VUE2.x推薦使用eventBus方式進行組件通信,而在wepy中是通過$broadcast,$emit,$invoke 三種方法實現通信。 8、VUE的生命周期包括created、mounted等,wepy僅支持小程序的生命周期:onLoad、onReady等。 9、wepy不支持過濾器、keep-alive、ref、transition、全局插件、路由管理、服務端渲染等VUE特性技術。
與原生開發(fā)不同之處
1、數據綁定寫法不一:this.title = "this is title"; 替換 this.setData({title: "this is title"}); 注意:在異步函數中更新數據的時候,必須手動調用$apply方法,才會觸發(fā)臟數據檢查流程的運行。 setTimeout(() => { this.title = "this is title"; this.$apply(); }, 3000); 2、組件的循環(huán)渲染新增repeat標簽,其中該標簽不能添加類名,即不能添加樣式。 3、wepy框架對原生API請求進行封裝了,可以使用攔截器就行攔截。 4、wepy框架封裝的方法都是Promise,不是Object,一些原生方法返回的是Object,可以直接獲取到方法的返回對象。7-wepy報錯記錄 1. 記錄一:wepy.getUpdateManager()是Promise,不是對象 8-wepy踩坑記錄
官方已經特別指出并給出解決辦法1、在部份機型上使用display: flex;會出現兼容性問題
官方指出鏈接
解決辦法:使用less時,建議加上autoprefix插件,步驟如下:
npm install less-plugin-autoprefix --save-dev
const LessPluginAutoPrefix = require("less-plugin-autoprefix"); compilers: { less: { compress: true, plugins: [new LessPluginAutoPrefix({browsers: ["Android >= 2.3", "Chrome > 20", "iOS >= 6"]})] }
一些自己遇到的問題以及給出解決辦法1、BindInput與async沖突
微信小程序的bindinput:鍵盤輸入時觸發(fā),event.detail = {value, cursor, keyCode},keyCode 為鍵值,2.1.0 起支持,處理函數可以直接 return 一個字符串,將替換輸入框的內容。
當回調函數被async修飾,返回的會是promise,這導致輸入框內容被替換。
只好先調用一個普通的函數,然后再調用async函數。
// template // methods input的內容會被改變 methods = { async searchInput(e) { let value = e.detail.value; // some code using await // …… } } // fix methods = { searchInput(e) { let value = e.detail.value; // …… this.f(); // …… } } // 自定義方法直接定義在類中,不能放在methods下 async f() { // …… }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/98542.html
摘要:主要解決問題開發(fā)模式轉換在原有的小程序的開發(fā)模式下進行再次封裝,更貼近于現有框架開發(fā)模式。官方代碼獲取應用實例事件處理函數基于的實現支持組件化開發(fā)。根組件,一般都是頁面父組件小程序對象子組件列表方法參數返回值說明組件初始化。 小程序框架wepy文檔 Github地址 快速入門 項目創(chuàng)建與使用 安裝wepy 以下安裝都通過npm安裝 安裝 wepy 命令行工具。 npm install ...
摘要:四最后一點點感悟本文總結的比較淺顯很多地方說的也不是太詳細歡迎大家留言一起交流探討堅持學習不斷探索總結路漫漫其修遠兮吾將上下而求索參考資料官方文檔微信小程序官網開發(fā)文檔官方開發(fā)文檔 一、微信小程序wepy框架簡介: 微信小程序WePY框架是騰訊官方推出來的框架,類似的框架還有美團的mpvue,京東的Taro等; 目前公司開發(fā)小程序主要用到的是微信原生方法和官方的wepy框架; wepy...
摘要:上一篇小程序開發(fā)第一篇注冊獲取同步企業(yè)項目數據微信小程序開發(fā)者工具下載小程序開發(fā)者工具使用小程序原生開發(fā)直接使用小程序開發(fā)者工具打開項目即可小程序框架開發(fā)首選官方提供類開發(fā)框架,備選。 上一篇:小程序開發(fā) 第一篇:注冊、獲取unionid同步企業(yè)項目數據 1.微信小程序開發(fā)者工具 下載:小程序開發(fā)者工具 使用: 小程序原生開發(fā):直接使用小程序開發(fā)者工具打開項目即可 小程序框架開發(fā):...
閱讀 2849·2021-08-20 09:37
閱讀 1607·2019-08-30 12:47
閱讀 1090·2019-08-29 13:27
閱讀 1685·2019-08-28 18:02
閱讀 749·2019-08-23 18:15
閱讀 3084·2019-08-23 16:51
閱讀 931·2019-08-23 14:13
閱讀 2125·2019-08-23 13:05