成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

wepy框架開發(fā)小程序文檔

Luosunce / 3048人閱讀

摘要:目錄項(xiàng)目構(gòu)建文件使用優(yōu)化之處組件通信的使用注意事項(xiàng)報錯記錄踩坑記錄項(xiàng)目構(gòu)建官方文檔地址鏈接項(xiàng)目源碼地址鏈接項(xiàng)目資料地址鏈接簡單介紹是一個微信小程序框架,支持模塊化開發(fā),開發(fā)風(fēng)格類似。使用的方式請求小程序原生都將化。

目錄

wepy項(xiàng)目構(gòu)建

wepy文件使用

wepy優(yōu)化之處

wepy組件通信

wepy的API使用

wepy注意事項(xiàng)

wepy報錯記錄

wepy踩坑記錄

1. wepy項(xiàng)目構(gòu)建

官方文檔地址鏈接
項(xiàng)目源碼地址鏈接
項(xiàng)目資料地址鏈接

簡單介紹:wepy是一個微信小程序框架,支持模塊化開發(fā),開發(fā)風(fēng)格類似Vue.js??纱钆鋜edux使用,能同時打包出web和小程序。

全局安裝或更新WePY命令行工具

npm install -g wepy-cli

創(chuàng)建項(xiàng)目

wepy init standard my-project[項(xiàng)目名]

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,會對代碼格式校驗(yàn)
? Use Redux in your project? No ---選擇Yes,可以使用Redux框架語法,目錄會多出store目錄
? Use web transform feature in your project? Yes ---選擇Yes會有index.template.html
切換至項(xiàng)目目錄

cd wepy-demo[項(xiàng)目目錄]

安裝依賴

npm install

開啟實(shí)時編譯

npm run dev

構(gòu)建項(xiàng)目完整目錄

2-wepy文件使用 1、app.wpy文件介紹
// template、style、script三大標(biāo)簽,有l(wèi)ang、src屬性,當(dāng)src屬性存在文件,那么其內(nèi)部代碼會被忽略。
// app.apy小程序入口文件

2、pages目錄下的文件介紹
// pages目錄下存放主頁面,代碼編寫與app.wpy相似,不同之處如下:
// 因?yàn)閍pp.wpy不需要template,但pages目錄下的頁面需要
// 在Pages下的頁面實(shí)例中,可以通過this.$parent來訪問App實(shí)例。
// Page頁面繼承自Component組件,即Page也是組件。除擴(kuò)展了頁面所特有的config配置以及特有的頁面生命周期函數(shù)之外,
其它屬性和方法與Component一致。

3、components目錄下的文件介紹
// components目錄下存放組件
// 頁面可以引入組件,而組件還可以引入子組件。

import wepy from "wepy"
// 引入child組件文件
import Child from "../components/child";
4、mixins目錄下的文件介紹
// mixins是放混合組件的地方,用于復(fù)用不同組件中的相同功能。
// 例如: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)境變量來改變運(yùn)行時的參數(shù)
  wpyExt: ".wpy", ---文件后綴名設(shè)置
  eslint: false, ---關(guān)閉eslint校驗(yàn)
  
  resolve: {
    alias: {
        counter: path.join(__dirname, "src/components/counter"),
        "@": path.join(__dirname, "src") //配置文件路徑代碼
    },
    aliasFields: ["wepy", "weapp"],
    modules: ["node_modules"]
  },
一、 wepy項(xiàng)目中使用async await

官方指出鏈接需要在該文件下配置如下語句:

babel: {
        "presets": [
            "env"
        ],
        "plugins": [
            "transform-export-extensions",
            "syntax-export-extensions"
        ]
    }
二、 wepy根據(jù)環(huán)境變量來改變運(yùn)行時的參數(shù)

官方指出鏈接

3-wepy優(yōu)化之處 1. wx.request 接收參數(shù)修改
// 原生代碼:
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)化事件參數(shù)傳遞
// 原生的事件傳參方式:
 Click 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。
// 事件響應(yīng)以及組件通訊事件參數(shù)順序調(diào)整,將$event移至末尾,即最后一個參數(shù)為事件參數(shù)。
 Click me! 

methods: {
    tapName (id, title, other, event) {
        console.log(id, title, other)// output: 1, wepy, otherparams
    }
}

// 蒙層彈窗出現(xiàn)與隱藏


...



...

data = {
    flags: {
        layerRule: true,
        layerPrize: true,
        ...
    }
}

//出現(xiàn)
showLayer (e,layerName) {
    let key = layerName.currentTarget.dataset.wpyshowlayerA; //優(yōu)化data-,此時dataset結(jié)點(diǎn)后的字段名框架自動生成,
    為wpy + 函數(shù)名(小寫) + 大寫26個字母中的一個,
    由于我上面只傳了一個參數(shù),則此時e代表的就是此時傳的第一個參數(shù)名。
    // 記住:最后一個才會是事件名,所有的事件都綁在最后一個參數(shù)上。
    this.flags[key] = false;
},
//消失
hideLayer (e,layerName) {
    let key = layerName.currentTarget.dataset.wpyhidelayerA;
    this.flags[key] = true;
},
3.動態(tài)綁定class
// 在vue中動態(tài)綁定class
// 在wepy中,要使用微信原生的綁定語法 // 其中 class-a 是不需要動態(tài)綁定的class, 雙括號中才是需要綁定的class
4.新增interceptor攔截器

可以使用WePY提供的全局?jǐn)r截器對原生API的請求進(jìn)行攔截。
具體方法是配置API的config、fail、success、complete回調(diào)函數(shù)。參考示例:

import wepy from "wepy";

export default class extends wepy.app {
    constructor () {
        // this is not allowed before super()
        super();
        // 攔截request請求
        this.intercept("request", {
            // 發(fā)出請求時的回調(diào)函數(shù)
            config (p) {
                // 對所有request請求中的OBJECT參數(shù)對象統(tǒng)一附加時間戳屬性
                p.timestamp = +new Date();
                console.log("config request: ", p);
                // 必須返回OBJECT參數(shù)對象,否則無法發(fā)送請求到服務(wù)端
                return p;
            },

            // 請求成功后的回調(diào)函數(shù)
            success (p) {
                // 可以在這里對收到的響應(yīng)數(shù)據(jù)對象進(jìn)行加工處理
                console.log("request success: ", p);
                // 必須返回響應(yīng)數(shù)據(jù)對象,否則后續(xù)無法對響應(yīng)數(shù)據(jù)進(jìn)行處理
                return p;
            },

            //請求失敗后的回調(diào)函數(shù)
            fail (p) {
                console.log("request fail: ", p);
                // 必須返回響應(yīng)數(shù)據(jù)對象,否則后續(xù)無法對響應(yīng)數(shù)據(jù)進(jìn)行處理
                return p;
            },

            // 請求完成時的回調(diào)函數(shù)(請求成功或失敗都會被執(zhí)行)
            complete (p) {
                console.log("request complete: ", p);
            }
        });
    }
}
4-wepy組件通信
組件傳值
// wepy.component基類提供$broadcast、$emit、$invoke三個方法用于組件之間的通信和交互
   · $broadcast:父組件觸發(fā)所有子組件事件
   · $emit:子組件觸發(fā)父組件事件
   · $invoke:子組件觸發(fā)子組件事件
   注意:可以以$標(biāo)識符來獲取wepy框架內(nèi)建屬性和方法。$name:String: 組件名稱。
$broadcast使用案例:

$broadcast事件是由父組件發(fā)起,所有子組件都會收到此廣播事件,除非事件被手動取消。事件廣播的順序?yàn)閺V度優(yōu)先搜索順序。

// index.wpy(pages頁面) ---父組件


// list.wpy(components頁面) ---子組件
$emit使用案例:

$emit與$broadcast正好相反,事件發(fā)起組件的所有祖先組件會依次接收到$emit事件。

下面通過這個例子來說明

// index.wpy(pages頁面) ---父組件


// count.wpy(components頁面) ---子組件

$invoke使用案例:

$invoke是一個頁面或組件對另一個組件中的方法的直接調(diào)用,通過傳入組件路徑找到相應(yīng)的組件,然后再調(diào)用其方法。
比如,想在頁面Page_Index中調(diào)用組件ComA的某個方法:

this.$invoke("ComA", "someMethod", "someArgs");

如果想在組件ComA中調(diào)用組件ComG的某個方法:

this.$invoke("./../ComB/ComG", "someMethod", "someArgs");
5-wepy的API使用
wepy 封裝的屬性,可以獲取globalData、$wxapp等

1.$instance 全局實(shí)例封裝

//wepy.app Class
//屬性
1.$wxapp:Object 等同于 getApp()
2.$pages:List 所有列表頁面
3.$interceptors:List 所有攔截器列表
//方法
4.$intercept:(api:String, Probider:Object) 使用攔截器對原生API請求進(jìn)行攔截
5.use(middleWare:String|Function) 使用中間件
//wepy.component Class 
//屬性
1.$name:String 組件名稱
2.$isComponent:Boolean 是否是組件,如果是頁面,此值為false
3.$wxpage:Object 小程序原生page
4.$parent:Page|App 組件的父組件,如果當(dāng)前是組件是page對象,那么$parent的值為App對象
5.$root:Page 組件所在的Page對象,如果當(dāng)前組件是Page對象,那么$root的值就是自己本身。
6.$coms:List 組件的子組件列表
7.$mixins:Array[Mixin] 組件所注入的Mixin對象
8.data:Object 組件需要響應(yīng)的事件列表
9.methods:List 組件需要響應(yīng)的事件列表
10.props:List 組件允許傳遞的props列表
11.events:List 組件通信時所需要的事件表現(xiàn)
//方法
1.setData(key:String|Object, [value:Object]) 對原有小程序的setData的封裝(wepy的贓查檢流程會自動執(zhí)行setData操作,一般不需要使用)
2.getCurrentPages()
3.$getComponent(com:String) 通過組件名稱路徑查找組件對象
4.$invoke(com:String|Component) 調(diào)用另一組件的方法。優(yōu)先調(diào)用methods中方法,如果方法不存在,則調(diào)用組件的自定義方法,調(diào)用自定義方法時,不會傳遞事件$event。
5.$broadcast(eventName:String,[args]) 組件發(fā)起一個廣播事件
向所有子組件發(fā)起一個廣播事件,事件會依次傳播直至所有子組件遍歷完畢或者事件被手動終止傳播。
6.$emit(eventName:String,[args]) 組件發(fā)起一個冒泡事件
向父組件發(fā)起一個冒泡事件,事件會向上冒泡直至Page或者者事件被手動終止傳播。
7.$apply([func:Function]) 組件發(fā)起臟檢查
正常流程下,改變數(shù)據(jù)后,組件會在流程結(jié)束時自動觸發(fā)臟檢查。 在異步或者回調(diào)流程中改變數(shù)據(jù)時,需要手動調(diào)用$apply方法。
this.userName = "Gcaufy";
this.$apply();

this.$apply(() => {
  this.userName = "Gcaufy";
});
8.$nextTick(func:Function) 組件數(shù)據(jù)綁定完成后的回調(diào)事件
數(shù)據(jù)綁定后的回調(diào)事件,在不傳入function時,返回一個promise對象
this.userName = "Gcaufy";
this.$nextTick(function () {
    console.log("UI updated");
});

this.userName = "Gcaufy";
this.$nextTick().then(function () {
    console.log("UI updated");
});
//wepy.page Class 
//屬性 全部屬性繼承自wepy.component
//方法
1.$preload(key:String|Object, value:Object]) 給頁面加載preload數(shù)據(jù)
加載preload數(shù)據(jù)后,跳轉(zhuǎn)至另一個頁面時,在onLoad方法中可以獲取到上個頁面的preload數(shù)據(jù)。
  // page1.js
  this.$preload("userName", "Gcaufy");
  this.$redirect("./page2");

  // page2.js
  onLoad (params, data) {
      console.log(data.preload.userName);
  }
 2.$redirect(url:String|Object, [params:Object]) wx.redirectTo的封裝方法
  this.$redirect("./page2", {a: 1, b: 2});
  this.$redirect({
      url: "./pages?a=1&b=2"
  });
 3.$navigate(url:String|Object,[params:Object]) wx.navigateTo的封裝方法
 4.$switch(url:String|Object) wx.switchTab的封裝方法
 // wepy.event Class 小程序事件封裝類
 new wepy.event(name:String, source:Component, type:String)
 //屬性
 1.name(String) 事件名稱
 當(dāng)事件為小程序原生事件時,如tap,change等,name值為system。 當(dāng)事件為用戶自定事件或者組件通信事件時,如$emit,$broadcast等,name值為自定事件的名稱。
 2.source(Component) 事件來源組件
 無論是小程序原生事件還是自定事件,都會有對應(yīng)的事件來源組件。
 3.type(String) 事件類型
 $emit事件中,type值為emit。bindtap事件中,type值為tap。
 //方法
 1.$destory() 終止事件傳播
 在$emit或者$broadcast事件中,調(diào)用$destroy事件終止事件的傳播。
 2.$transfor(wxevent:Object) 將內(nèi)部小程序事件的屬性傳遞到當(dāng)前事件
6-wepy注意事項(xiàng)
與Vue開發(fā)不同之處
1、methods方法使用不同:methods方法中只用于聲明頁面wxml中標(biāo)簽的bind、catch事件,自定義方法需以自定義方法的方式聲明。
2、命名規(guī)范不同:template里面組件組件標(biāo)簽命名使用駝峰式命名(即comChild),而不是短橫杠式命名(com-child)。
3、響應(yīng)事件順序不同:對于組件methods響應(yīng)事件,以及小程序頁面事件將采用兼容式混合,
即先響應(yīng)組件本身響應(yīng)事件,然后再響應(yīng)混合對象(mixin)中響應(yīng)事件。
注意,這里事件的執(zhí)行順序跟Vue中相反,Vue中是先執(zhí)行mixin中的函數(shù), 再執(zhí)行組件本身的函數(shù)。
4、wepy中也有computed,props,slot,data,watch等vue中有的一些屬性(沒有filter, directive)
props,slot,data,watch和vue基本無異,其中computed計算屬性是無法傳參的。
5、wepy中props傳遞需要加上.sync修飾符(類似VUE1.x)才能實(shí)現(xiàn)props動態(tài)更新,
并且父組件再變更傳遞給子組件props后要執(zhí)行this.$apply()方法才能更新。
關(guān)于props動態(tài)傳值,可以通過設(shè)置子組件props的twoWay: true來達(dá)到子組件數(shù)據(jù)綁定至父組件的效果。
那如果既使用.sync修飾符,同時子組件props中添加的twoWay: true時,就可以實(shí)現(xiàn)數(shù)據(jù)的雙向綁定了。
6、wepy支持?jǐn)?shù)據(jù)雙向綁定,子組件在定義props時加上twoway:true屬性值即可實(shí)現(xiàn)子組件修改父組件數(shù)據(jù)。
7、VUE2.x推薦使用eventBus方式進(jìn)行組件通信,而在wepy中是通過$broadcast,$emit,$invoke 三種方法實(shí)現(xiàn)通信。
8、VUE的生命周期包括created、mounted等,wepy僅支持小程序的生命周期:onLoad、onReady等。
9、wepy不支持過濾器、keep-alive、ref、transition、全局插件、路由管理、服務(wù)端渲染等VUE特性技術(shù)。
與原生開發(fā)不同之處
1、數(shù)據(jù)綁定寫法不一:this.title = "this is title"; 替換 this.setData({title: "this is title"});
注意:在異步函數(shù)中更新數(shù)據(jù)的時候,必須手動調(diào)用$apply方法,才會觸發(fā)臟數(shù)據(jù)檢查流程的運(yùn)行。
setTimeout(() => {
    this.title = "this is title";
    this.$apply();
}, 3000);
2、組件的循環(huán)渲染新增repeat標(biāo)簽,其中該標(biāo)簽不能添加類名,即不能添加樣式。
3、wepy框架對原生API請求進(jìn)行封裝了,可以使用攔截器就行攔截。
4、wepy框架封裝的方法都是Promise,不是Object,一些原生方法返回的是Object,可以直接獲取到方法的返回對象。
7-wepy報錯記錄 1. 記錄一:wepy.getUpdateManager()是Promise,不是對象

8-wepy踩坑記錄
官方已經(jīng)特別指出并給出解決辦法
1、在部份機(jī)型上使用display: flex;會出現(xiàn)兼容性問題

官方指出鏈接
解決辦法:使用less時,建議加上autoprefix插件,步驟如下:

一、安裝插件

npm install less-plugin-autoprefix --save-dev

二、配置插件 在wepy.config.js中加入
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 起支持,處理函數(shù)可以直接 return 一個字符串,將替換輸入框的內(nèi)容。
當(dāng)回調(diào)函數(shù)被async修飾,返回的會是promise,這導(dǎo)致輸入框內(nèi)容被替換。
只好先調(diào)用一個普通的函數(shù),然后再調(diào)用async函數(shù)。

// template


// methods input的內(nèi)容會被改變
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()
    {
        // ……
    }

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/98542.html

相關(guān)文章

  • wepy - 一個程序的組件化開發(fā)框架

    摘要:主要解決問題開發(fā)模式轉(zhuǎn)換在原有的小程序的開發(fā)模式下進(jìn)行再次封裝,更貼近于現(xiàn)有框架開發(fā)模式。官方代碼獲取應(yīng)用實(shí)例事件處理函數(shù)基于的實(shí)現(xiàn)支持組件化開發(fā)。根組件,一般都是頁面父組件小程序?qū)ο笞咏M件列表方法參數(shù)返回值說明組件初始化。 小程序框架wepy文檔 Github地址 快速入門 項(xiàng)目創(chuàng)建與使用 安裝wepy 以下安裝都通過npm安裝 安裝 wepy 命令行工具。 npm install ...

    I_Am 評論0 收藏0
  • 微信程序wepy框架學(xué)習(xí)和使用心得

    摘要:四最后一點(diǎn)點(diǎn)感悟本文總結(jié)的比較淺顯很多地方說的也不是太詳細(xì)歡迎大家留言一起交流探討堅持學(xué)習(xí)不斷探索總結(jié)路漫漫其修遠(yuǎn)兮吾將上下而求索參考資料官方文檔微信小程序官網(wǎng)開發(fā)文檔官方開發(fā)文檔 一、微信小程序wepy框架簡介: 微信小程序WePY框架是騰訊官方推出來的框架,類似的框架還有美團(tuán)的mpvue,京東的Taro等; 目前公司開發(fā)小程序主要用到的是微信原生方法和官方的wepy框架; wepy...

    Baaaan 評論0 收藏0
  • 程序開發(fā) 第二篇:使用微信程序開發(fā)者工具、wepy框架初始化項(xiàng)目

    摘要:上一篇小程序開發(fā)第一篇注冊獲取同步企業(yè)項(xiàng)目數(shù)據(jù)微信小程序開發(fā)者工具下載小程序開發(fā)者工具使用小程序原生開發(fā)直接使用小程序開發(fā)者工具打開項(xiàng)目即可小程序框架開發(fā)首選官方提供類開發(fā)框架,備選。 上一篇:小程序開發(fā) 第一篇:注冊、獲取unionid同步企業(yè)項(xiàng)目數(shù)據(jù) 1.微信小程序開發(fā)者工具 下載:小程序開發(fā)者工具 使用: 小程序原生開發(fā):直接使用小程序開發(fā)者工具打開項(xiàng)目即可 小程序框架開發(fā):...

    HitenDev 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<