小程序出來也有一段日子了,剛出來時也留意了一下。不過趕上生病,加上公司里也有別的事,主要是自己犯懶,就一直沒做。這星期一,趕緊趁著這股熱乎勁,也不是很忙,終于磨磨唧唧的寫了個小demo,(當然還有好多接口沒有使用)。
預計閱讀時間:5min
小程序的框架,挺像Vue的。
wxml
1
2
|
<view> Hello {{name}}! </view>
<button bindtap="changeName"> Click me! </button>
|
js部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// This is our App Service.
// This is our data.
var helloData = {
name: 'WeChat'
}
// Register a Page.
Page({
data: helloData,
changeName: function(e) {
// sent data change to view
this.setData({
name: 'MINA'
})
}
})
|
開發者通過框架將邏輯層數據中的 name 與視圖層的 name 進行了綁定,所以在頁面一打開的時候會顯示 Hello WeChat! 當點擊按鈕的時候,視圖層會發送 changeName 的事件給邏輯層,邏輯層找到對應的事件處理函數 邏輯層執行了 setData 的操作,將 name 從 WeChat 變為 MINA,因為該數據和視圖層已經綁定了,從而視圖層會自動改變為 Hello MINA!
工具: 微信 web 開發者工具 我一般在這里只預覽效果用。
app.json文件來對微信小程序進行全局配置,決定頁面文件的路徑、窗口表現、設置網絡超時時間、設置多 tab 等。
改變pages里配置,會更改啟動程序時的主頁面。 window是設置頁面的窗口表現,包括狀態欄,導航欄顏色 等等。 tarbar是底部tab欄的表現。 官方還有 networkTimeout和 debug選項,在這里沒有配置。 networkTimeout可以設置各種網絡請求的超時時間。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
{
"pages": [
"pages/index/other",
"pages/other/index",
"pages/logs/logs",
"pages/login/login",
"pages/douban/douban",
"pages/douban/user",
"pages/other/comment"
],
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#3CB371",
"navigationBarTitleText": "Ed Glayxe",
"navigationBarTextStyle": "light",
"backgroundColor": "#3CB371"
},
"tabBar": {
"list": [{
"pagePath": "pages/index/index",
"text": "我的",
"iconPath": "images/tabList/my_a.png",
"selectedIconPath": "images/tabList/my_b.png"
}, {
"pagePath": "pages/logs/logs",
"text": "日志",
"iconPath": "images/tabList/log_a.png",
"selectedIconPath": "images/tabList/log_b.png"
}, {
"pagePath": "pages/other/other",
"text": "段子",
"iconPath": "images/tabList/joke_a.png",
"selectedIconPath": "images/tabList/joke_b.png"
}, {
"pagePath": "pages/login/login",
"text": "登錄",
"iconPath": "images/tabList/Login_a.png",
"selectedIconPath": "images/tabList/Login_b.png"
}, {
"pagePath": "pages/douban/douban",
"text": "用戶列表",
"iconPath": "images/tabList/user_a.png",
"selectedIconPath": "images/tabList/user_b.png"
}]
}
}
|
app.js、app.json、app.wxss這三個文件是必不可少的文件。.js后綴的是腳本文件,.json后綴的文件是配置文件,.wxss后綴的是樣式表文件。微信小程序會讀取這些文件,并生成小程序實例。這些都是公共文件。 在我的wxss里引入了weui的wxss 有的頁面使用了它的UI。
Pages 里面是對應的頁面。每個對應的頁面里都有 相應的js wxml wxss文件。對文件進行配置。
在common文件夾了 寫了一個評論template 嘗試了一下引入模板。 在utils里封裝了一下內部的方法。
在小程序里支持flex布局,還是挺不錯的。 我有時布局的時候都給寫個html文件,在瀏覽器里看看樣式。然后照搬到微信小程序里。但是我寫的頁面并不復雜。并不能完全的發現更多的不同。 在小程序里試圖層為view ,但它并不像div一樣,view 和text在一起會重疊。我覺得相當于 div和span。 還有一些CSS樣式并不支持。
數據渲染:
這個用flex布局寫的,頁面比較簡單。
我記得昨天有個東西我找了好久,就是 “enablePullDownRefresh”: true。允許用戶下拉。 一開始我以為這是自己寫的。這是配置在json文件里。官方的文件幾乎沒怎么看。。然后就尷尬了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
var util = require("../../utils/util.js");
var app = getApp();
Page({
data: {
textDataList: [],
tempid: 0,
lastid: 0
},
onLoad: function() {
util.alertLoading('數據加載中', 2000);
this.loadData();
},
refreshData: function() {
util.alertLoading('刷新中', 2000);
this.loadData();
},
loadData: function() {
var that = this;
var url = 'http://api.budejie.com/api/api_open.php';
var requireData = { a: 'list', c: 'data', type: '29' };
util.request(url, requireData, function(res) {
var newData = res.data;
that.setData({
textDataList: newData.list,
tempid: newData.list[0].id
})
console.log(that.data.tempid);
})
},
onReachBottom: function() {
util.alertLoading("加載中!", 2000);
console.log("加載這個沒做 = =!");
},
onPullDownRefresh: function() {
util.alertLoading("刷新中!", 1000);
var that = this;
var url = 'http://api.budejie.com/api/api_open.php';
var requireData = { a: 'list', c: 'data', type: '29' };
util.request(url, requireData, function(res) {
var newData = res.data;
that.setData({
textDataList: newData.list,
lastid: newData.list[0].id
})
console.log(that.data.lastid);
});
if (this.data.lastid === this.data.tempid) {
util.alertSuccess("已經是最新了", 1000);
}
}
})
|
微信小程序思維導圖(來源于網絡)
快下班了,其實寫之前我想寫的更詳細一點,但更多的介紹我想沒有比官方更清楚的。
我覺得最好的學習方式就是擼一遍代碼,比看10個demo有用的多。
時間倉促,頁面很簡單。也希望把你的demo分享給我互相學習。感謝你的閱讀,
Bye。