技術棧:wepy+zanuicss
全局安裝或更新WePY命令行工具git
npm install wepy-cli -g
安裝依賴github
npm install
開啓實時編譯npm
wepy build --watch
git clone https://github.com/youzan/zanui-weapp.git
Step1:打開下載好的zanui
找到dist
文件包,把整個dist
文件拷貝打本身的項目的src
下,並改名爲zanui
.
Step2:在頁面中使用zanui
,在config中配置小程序
config = { usingComponents:{ "zan-button": "/zanui/btn/index", "zan-cell": "/zanui/cell/index" } }
scoped
<style lang="less" scoped></style>
,代表該樣式只做用於當前文件使用promise和async微信小程序
// 原生代碼: 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 支持,參考 WIKI async function request () { let d = await wepy.request('xxxxx'); console.log(d); }
① 下載安裝babel
promise
cnpm install --save babel-preset-es2015 cnpm install --save babel-preset-stage-1
② 在wepy.config.js
中配置微信
babel: { sourceMap: true, presets: [ 'env', 'es2015', 'stage-1' ], plugins: [ 'transform-class-properties', 'transform-decorators-legacy', 'transform-object-rest-spread', 'transform-export-extensions', 'syntax-export-extensions' ] }
③ 在app.wpy中配置babel
import 'wepy-async-function' export default class extends wepy.app { constructor () { super() this.use('requestfix') this.router = routerList } }
數據綁定app
// bad <view> {{ message }} </view> onLoad: function () { this.setData({message: 'hello world'}); } // good <view> {{ message }} </view> onLoad () { this.message = 'hello world'; }
Wepy數據綁定
WePY使用髒數據檢查對setData
進行封裝,在函數運行週期結束時執行髒數據檢查
this.title = 'this is title';
可是在異步函數中更新數據的時候,必須手動調用$apply
setTimeout(() => { this.title = 'this is title'; this.$apply(); }, 3000);
組件應用
WePY中的組件都是靜態組件,是以組件ID做爲惟一標識的,每個ID都對應一個組件實例,當頁面引入兩個相 同ID的組件時,這兩個組件共用同一個實例與數據,當其中一個組件數據變化時,另一個也會一塊兒變化。
<template> <view class="child1"> <child></child> </view> <view class="child2"> <anotherchild></anotherchild> </view> </template> <script> import wepy from 'wepy'; import Child from '../components/child'; export default class Index extends wepy.component { components = { //爲兩個相同組件的不一樣實例分配不一樣的組件ID,從而避免數據同步變化的問題 child: Child, anotherchild: Child }; } </script>
注意:WePY中,在父組件template模板部分插入駝峯式命名的子組件標籤時,不能將駝峯式命名轉換成短橫杆式命名(好比將childCom轉換成child-com)。
組件循環渲染
當須要循環渲染WePY組件時(相似於經過wx:for
循環渲染原生的wxml
標籤),必須使用WePY定義的輔助標籤<repeat>
<template> <!-- 注意,使用for屬性,而不是使用wx:for屬性 --> <repeat for="{{list}}" key="index" index="index" item="item"> <!-- 插入<script>腳本部分所聲明的child組件,同時傳入item --> <child :item="item"></child> </repeat> </template>
props傳值
① 靜態傳值
靜態傳值爲父組件向子組件傳遞常量數據,所以只能傳遞**String字符串類型**。
② 動態傳值
<child :title="parentTitle" :syncTitle.sync="parentTitle" :twoWayTitle="parentTitle"></child> data = { parentTitle: 'p-title' }; // child.wpy props = { // 靜態傳值 title: String, // 父向子單向動態傳值 syncTitle: { type: String, default: 'null' }, twoWayTitle: { type: String, default: 'nothing', twoWay: true } }; onLoad () { console.log(this.title); // p-title console.log(this.syncTitle); // p-title console.log(this.twoWayTitle); // p-title this.title = 'c-title'; console.log(this.$parent.parentTitle); // p-title. this.twoWayTitle = 'two-way-title'; this.$apply(); console.log(this.$parent.parentTitle); // two-way-title. --- twoWay爲true時,子組件props中的屬性值改變時,會同時改變父組件對應的值 this.$parent.parentTitle = 'p-title-changed'; this.$parent.$apply(); console.log(this.title); // 'c-title'; console.log(this.syncTitle); // 'p-title-changed' --- 有.sync修飾符的props屬性值,當在父組件中改變時,會同時改變子組件對應的值。 }
wepy.component
基類提供$broadcast、$emit、$invoke
三個方法用於組件之間的通訊和交互