我的微信小程序入門踩坑之旅


前言

更好的閱讀體驗請:我的微信小程序入門踩坑之旅

小程序出來也有一段日子了,剛出來時也留意了一下。不過趕上生病,加上公司里也有別的事,主要是自己犯懶,就一直沒做。這星期一,趕緊趁着這股熱乎勁,也不是很忙,終於磨磨唧唧的寫了個小demo,(當然還有好多接口沒有使用)。

預計閱讀時間:5min

正文

介紹

小程序的框架,挺像Vue的。

wxml

<view> Hello {{name}}! </view>
<button bindtap="changeName"> Click me! </button>

  


js部分
 

// 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

app.json文件來對微信小程序進行全局配置,決定頁面文件的路徑、窗口表現、設置網絡超時時間、設置多 tab 等。

改變pages里配置,會更改啟動程序時的主頁面。
window是設置頁面的窗口表現,包括狀態欄,導航欄顏色 等等。
tarbar是底部tab欄的表現。
官方還有 networkTimeout和 debug選項,在這里沒有配置。
networkTimeout可以設置各種網絡請求的超時時間。

 

{
"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文件里。官方的文件幾乎沒怎么看。。然后就尷尬了。

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。

項目地址: https://github.com/miloers/WxSmall

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM