微信小程序可以說是當下很火熱的應用了赴精。在好奇心的作用下完沪,通讀了一遍之后便開始上手擼了一個很簡單的天氣應用——小川天氣息尺。
目前已經發(fā)布正式版本携兵,你可以直接在微信中搜索小川天氣
來使用。
小程序的文檔已經很完善了搂誉,通讀一遍后上手寫代碼并不是很難徐紧,下面主要講一下本人在開發(fā)微信小程序的一些感觸(坑)~
SetData
類似于React
的setState
,用于更改狀態(tài)炭懊,但小程序做得更加智能并级,你完全可以直接修改數(shù)組中的某一項的值而不必再克隆一份出來:
//小程序
this.setData({
"arr[0]": "new value"
})
//react
let _arr = JSON.parse(JSON.stringify(this.state.arr));
_arr[0] = "new value";
this.setState({
arr: _arr
})
修改對象也是如此:
//小程序
this.setData({
"obj.name": "mescal-chuan"
})
//react
let _obj = JSON.parse(JSON.stringify(this.state.obj));
_obj.name = "mescal-chuan";
this.setState({
obj: _obj
})
頁面中綁定函數(shù)
使用bind
指令進行函數(shù)綁定:
<view bindtap="openModal"></view>
看起來和vue
差不多,然而如果你想給這個函數(shù)傳遞一些參數(shù)就比較惡心了:
<view bindtap="openModal" data-index="{{index}}"></view>
//js
openModal() {
const currentIndex = e.currentTarget.dataset.index;
this.setData({
currentIndex
})
wx.showModal({
title: config.lifeStyleTitle(activity[currentIndex].type),
content: activity[currentIndex].txt,
showCancel: false
})
}
頁面通信
以本應用為例凛虽,用戶在城市選擇頁選擇新的城市之后死遭,需要通知首頁刷新數(shù)據(jù)。在單頁應用中我們可以使用redux
或vuex
這類狀態(tài)管理庫實現(xiàn)狀態(tài)的全局化凯旋;在使用dcloud
這類webapp
開發(fā)時呀潭,我們可以用它們自己內部定制的事件傳遞來實現(xiàn)跨頁面通信钉迷。那么在微信小程序中,你可以獲取一個頁面的實例钠署,然后直接調用該頁面內部的方法糠聪。
//city.js
selectCity(e) {
const keyIndex = e.currentTarget.dataset.key;
const childIndex = e.currentTarget.dataset.child;
const pages = getCurrentPages();
const homePage = pages[0];
//調用首頁的方法來刷新首頁數(shù)據(jù)
homePage.getNewCity(null, keyIndex, childIndex);
wx.navigateBack();
}
指令中使用函數(shù)
很遺憾,一個頁面內部的函數(shù)只能用在事件綁定中谐鼎,如果你想實現(xiàn)類似于<text>{{getDateText(index)}}</text>
這樣的功能舰蟆,可以考慮使用wxs
。它是小程序的一套腳本語言狸棍,配合我們的wxml
一起完成頁面構建身害。
//index.vue
<template>
<p>{{getDateText(index)}}</p>
</template>
<script>
export default {
...
methods: {
getDateText(index) {
return xxx;
}
}
...
}
</script>
//index.wxs
var getDateText = function(index) {
return xxx;
}
module.exports = {
getDateText: getDateText
}
//index.wxml
<wxs src="./index.wxs" module="forecast"/>
<text>{{forecast.getDateText(index)}}</text>
UI
小程序的組件到目前為止還不是很完善,一些比較常用的組件需要自己實現(xiàn)草戈,比如:抽屜塌鸯、模態(tài)框、Loading等唐片。當然丙猬,github
上也有一些比較成熟的UI庫供你直接使用,比如本項目中用到的小程序版echarts费韭。
總結
目前為止遇到的坑大致如此茧球,由于只是開發(fā)了一個簡單應用,所涉及到的知識只是皮毛星持,后續(xù)有時間會繼續(xù)開發(fā)一個復雜應用抢埋。