国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

Luosunce / 3030人閱讀

摘要:目錄項目構建文件使用優(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一致。

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

import wepy from "wepy"
// 引入child組件文件
import Child from "../components/child";
4、mixins目錄下的文件介紹
// 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"]
  },
一、 wepy項目中使用async await

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

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

官方指出鏈接

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)化事件參數傳遞
// 原生的事件傳參方式:
 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。
// 事件響應以及組件通訊事件參數順序調整,將$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;
},
3.動態(tài)綁定class
// 在vue中動態(tài)綁定class
// 在wepy中,要使用微信原生的綁定語法 // 其中 class-a 是不需要動態(tài)綁定的class, 雙括號中才是需要綁定的class
4.新增interceptor攔截器

可以使用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頁面) ---子組件

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

this.$apply(() => {
  this.userName = "Gcaufy";
});
8.$nextTick(func:Function) 組件數據綁定完成后的回調事件
數據綁定后的回調事件,在不傳入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數據
加載preload數據后,跳轉至另一個頁面時,在onLoad方法中可以獲取到上個頁面的preload數據。
  // 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) 事件名稱
 當事件為小程序原生事件時,如tap,change等,name值為system。 當事件為用戶自定事件或者組件通信事件時,如$emit,$broadcast等,name值為自定事件的名稱。
 2.source(Component) 事件來源組件
 無論是小程序原生事件還是自定事件,都會有對應的事件來源組件。
 3.type(String) 事件類型
 $emit事件中,type值為emit。bindtap事件中,type值為tap。
 //方法
 1.$destory() 終止事件傳播
 在$emit或者$broadcast事件中,調用$destroy事件終止事件的傳播。
 2.$transfor(wxevent:Object) 將內部小程序事件的屬性傳遞到當前事件
6-wepy注意事項
與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

二、配置插件 在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 起支持,處理函數可以直接 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

相關文章

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

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

    I_Am 評論0 收藏0
  • 微信程序wepy框架學習和使用心得

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

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

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

    HitenDev 評論0 收藏0

發(fā)表評論

0條評論

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