前面寫了幾篇文章,簡單地介紹了一下小程式。相信完整看下來的讀者,對微信小程式應該有了一定的認識。學習,需要邊學邊練,這樣掌握起來快,反正我喜歡這麼去學習一樣新的技術。學而不思則罔,思而不學則殆嘛。下面,我們一起從0開始,來做一個簡單的例項。這個例項我分成2篇文章來講解:1,完成介面、API互動 2,問題總結及注意事項。
例子描述:我們一起來做一個叫做“知乎新聞”的小程式,小程式通過zhihu的API查詢新聞,把最新的新聞標題列出來,點選標題後顯示新聞的詳細內容。
1、首頁
設計思路:
⑴ 頭部“知乎新聞”,通過設定app.json裡的window屬性就可以了。
⑵ 底部的“首頁”、“主題新聞”,通過設定app.json裡的tabBar屬性就可以了。
⑶ 圖片滾動新聞,用swiper滑塊滾動檢視元件。
⑷ 新聞列表,用view元件;其中,有一個點選新聞標題後,顯示新聞詳細內容的功能。這個功能,用navigator元件。
程式碼編寫:
⑴ app.json
"window":{
"backgroundTextStyle":"dark",
"navigationBarBackgroundColor": "#00a2ea",
"navigationBarTitleText": "知乎新聞",
"navigationBarTextStyle": "white"
},
"tabBar": {
"color": "#353535",
"selectedColor": "#3cc51f",
"borderStyle": "white",
"backgroundColor": "#ffffff",
"list": [{
"pagePath": "pages/index/index",
"iconPath": "images/icon_API.png",
"selectedIconPath": "images/icon_API_HL.png",
"text": "主頁"
}, {
"pagePath": "pages/theme/theme",
"iconPath": "images/icon_component.png",
"selectedIconPath": "images/icon_component_HL.png",
"text": "主題新聞"
}]
},
跟pages同級建立一個images目錄,把png圖片檔案拷貝到這個目錄。然後點選開發者工具左側的“編譯”,顯示如下介面:
⑵ 新增“圖片滾動新聞”
① index.wxml裡,新增如下程式碼:
<view>
<swiper indicator-dots="true"
autoplay="true" interval="3000" duration="2000">
<swiper-item >
<image src="" data-id="" />
<text>title</text>
</swiper-item>
</swiper>
</view>
現在,介面有了,但swiper元件裡沒有圖片來源,下面需要通過呼叫zhihu的API,把圖片來源動態地獲取出來。
② index.js裡,新增如下程式碼:
data: {
banner: [],
duration: 2000, // 滑動動畫時長
indicatorDots: true, // 是否顯示皮膚指示點
autoplay: true, // 是否自動切換
interval: 3000 // 自動切換時間間隔
},
onLoad () {
var that = this
wx.request({ //呼叫API,獲取新聞資料
url: `http://news-at.zhihu.com/api/4/news/latest`,
headers: {
`Content-Type`: `application/json`
},
success (res) {
that.setData({
banner: res.data.top_stories
})
}
})
},
③ 這裡需要說明下,呼叫任何API前,需要先了解API返回的資料格式。
http://news-at.zhihu.com/api/…返回的資料格式如下:
為了在swiper中動態顯示圖片,標題。index.wxml的程式碼需要修改成:
<view>
<swiper indicator-dots="{{indicatorDots}}"
autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}">
<block wx:for="{{banner}}">
<swiper-item >
<image src="{{item.image}}" data-id="{{item.id}}" />
<text>{{item.title}}</text>
</swiper-item>
</block>
</swiper>
</view>
編譯後,顯示的介面如下:
④ 點選滾動圖片,顯示新聞具體內容。
<image>元件裡新增bindtap屬性,修改後的程式碼如下:
<image src="{{item.image}}" data-id="{{item.id}}"
bindtap="bindViewTap" class="banner-image"/>
⑤ index.js需要新增相應的bindViewTap方法,如下:
bindViewTap(e) {
wx.navigateTo({
url: `../detail/detail?id=` + e.target.dataset.id
})
},
2、detail頁面
前面的首頁,點選滾動圖片,需要顯示新聞具體內容。這時,就需要建立1個detail頁面,頁面設計如下:
⑴ 跟index目錄並級,建立detail目錄,並建立detail.wxml, detail.js 2個檔案。
① detail.js的程式碼如下:
onLoad (options) {
var that = this
wx.request({
url: `http://news-at.zhihu.com/api/4/news/` + options.id,
headers: {
`Content-Type`: `application/json`
},
success (res) {
that.setData({
art: res.data
})
}
})
}
② wxml的程式碼如下:
<view>
<view>
<image src="{{art.image}}"/>
<view>{{art.title}}</view>
<view>{{art.image_source}}</view>
</view>
<view>
{{art.body}}
</view>
</view>
編譯後,顯示的介面如下:
③ 發現小程式對含html格式的資料,顯示有問題。目前,只能人工把html程式碼過濾掉。後期,我希望騰訊能推出html元件,這樣使用者在<html> </html>裡顯示就沒問題了。
當然,現在你可以自己寫js程式碼,把html格式的資料處理掉。
3、完善首頁的“新聞列表”
⑴ 用wx:for迴圈列出新聞,用navigator頁面連結元件顯示每一條新聞。
⑵ 新增“更多”按鈕
具體程式碼,我這裡就不列了。因為再列程式碼,這文章也忒長了吧。我喜歡簡單,簡單。寫到這裡,我覺得用寫文章的方式來講例項,效果不是很好。下面我會錄個視訊教程,手把手教你寫完這個例項。
作者名字:有漁
有漁系列文章:
有漁微信小程式系統概述《六》小程式的API
有漁微信小程式技術分析《五》Mustache語法要點總結
有漁微信小程式系統進階《四》小程式元件
有漁微信小程式系統概述《三》view層及小程式框架概述
有漁微信小程式系統概述《二》瞭解.js檔案及.json檔案
有漁微信小程式系統概述《一》認識微信小程式與HelloWorld