无码日韩精品无码国产_一级做a爰片久久毛片潮喷_国产欧美国日产_久久9热re这里只有国产中文精品6_每天将为您更新成人影视在线看免费观看

Menu
小程序資訊
小程序資訊
Runlin微信小程序系列教程一:從零開始寫一個(gè)demo《下》
時(shí)間:2016-10-16 19:14:00

上一節(jié)實(shí)現(xiàn)了循環(huán)列表數(shù)據(jù)渲染到視圖,并給列表每一項(xiàng)添加了路由導(dǎo)航到新頁(yè)面查看更多細(xì)節(jié),但是目前我們的數(shù)據(jù)都是虛擬的,現(xiàn)在我們就開始利用微信的request請(qǐng)求來接收豆瓣電影接口提供的數(shù)據(jù)。

API: wx.request(OBJECT)

參數(shù)有7個(gè),這里主要講一下幾個(gè)重要的:

  1. url : 請(qǐng)求的地址
  2. data: 攜帶的數(shù)據(jù)
  3. method : 請(qǐng)求方式,默認(rèn)為get
  4. success: 請(qǐng)求成功的回調(diào)函數(shù)

了解了網(wǎng)路請(qǐng)求的方法后,我們就不需要我們?cè)瓉砟M的那些數(shù)據(jù)了,把所有的假數(shù)據(jù)統(tǒng)統(tǒng)干掉,留一個(gè)空的數(shù)據(jù)用來放數(shù)據(jù)即可。

data:{
    moivelist:[],
    loading:false
  }  

現(xiàn)在頁(yè)面進(jìn)來的時(shí)候只展示了一個(gè)標(biāo)題,因?yàn)閿?shù)據(jù)為空了循環(huán)不出來了,現(xiàn)在需要我們?cè)陧?yè)面進(jìn)來的時(shí)候發(fā)送一個(gè)請(qǐng)求來接受數(shù)據(jù)。

豆瓣提供的API:[Title]https://developers.douban.com/wiki/?title=movie_v2#search

具體參數(shù)和接口請(qǐng)自行查閱,使用方法:https://api.douban.com + 對(duì)應(yīng)的接口 + 參數(shù)(如果需要的話)

例子:https://api.douban.com/v2/movie/top250

我們以請(qǐng)求 排行250 這個(gè)接口為例:

onLoad: function() {
        var url=https://api.douban.com/v2/movie/top250;
        var that = this;//確?;卣{(diào)函數(shù)this的指向正確,后面會(huì)以es6的箭頭函數(shù)代替

        wx.request({
            url:url,  //KEY和KEY值相同可簡(jiǎn)寫為url
            data: {},  //不要求數(shù)據(jù)
            header: { 'Content-Type': 'application/json' },
            //成功時(shí)的回調(diào),res為返回值,需要儲(chǔ)存到我們的data數(shù)據(jù)里面
            success: function(res) {
                that.setData({
                    moivelist: res.data.subjects,
                    loading: true
                })
              }
           })
        }

寫完后,頁(yè)面進(jìn)來的時(shí)候就會(huì)發(fā)送請(qǐng)求,并將數(shù)據(jù)保存到moiveList,并通過循環(huán)把數(shù)據(jù)展示出來,但是如果網(wǎng)絡(luò)差的話,會(huì)有一段真空期是沒有數(shù)據(jù)的,我們需要給用戶一個(gè)提示。

給頁(yè)面添加一個(gè)loading

<loading hidden="{{loading}}">
    加載中....
</loading>
###我們讓這個(gè)loading一開始就是顯示的,當(dāng)數(shù)據(jù)加載成功后,才讓他消失。我們通過將hidden綁定到{{loading}}上,更改{{loading}}的布爾值來實(shí)現(xiàn)這個(gè)效果。一開始{{loading}}的值是false的,也就是不隱藏;success后將他設(shè)置為true,從而實(shí)現(xiàn)這個(gè)效果。
###這樣我們這個(gè)頁(yè)面就做好了,另一個(gè)頁(yè)面同理,改變一下接口就行了,我們主要看一下detail這個(gè)文件。
###我們現(xiàn)在可以實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求了,在之前我們detail的數(shù)據(jù)都是外面從列表傳過來的,我們是這么寫的。
<navigator url="../detail/detail?imgsrc={{item.imgsrc}}&title={{item.title}}&author={{item.author}}&introduce={{item.introduce}}&rank={{item.rank}}">

我靠這么長(zhǎng)一段代碼,真的需要嗎?我們現(xiàn)在就可以簡(jiǎn)寫了,我們只需要傳一個(gè)參數(shù)就可以了。

把template模板里面wxml里面上述代碼改成下面的

<navigator url="../detail/detail?id={{item.id}}">

我們只需要一個(gè)這個(gè)電影的ID就行了,我們可以根據(jù)這個(gè)ID自己請(qǐng)求數(shù)據(jù)

//在detail.js的Onload函數(shù)中獲取到頁(yè)面?zhèn)鬟^來的ID
 onLoad: function(options) {
        var that = this;
        var address = 'https://api.douban.com/v2/movie/subject/';
        wx.request({
            url: address + options.id,
            data: {},
            header: { 'Content-Type': 'application/json' },
            success: function(res) {
                that.setData({
                    item: res.data,
                    loading: true
                })
            }
        })
    }

這樣就完成了,現(xiàn)在我們?cè)趖abBar新增一個(gè)搜索頁(yè)面。記住新頁(yè)面都要添加到app.json中,這里就不再闡述了,頁(yè)面大概這個(gè)樣子

<import src="../temple/temple.wxml"></import>

<loading hidden="{{loading}}">

    加載中....

</loading>


<view class="searchWrap">

    <view class="inputWrap">

        <icon type="search" size="20"/> 

        <input placeholder="請(qǐng)輸入搜索內(nèi)容"  value="{{content}}" type="text"  placeholder-style="custom-placeholder-style" placeholder-class="custom-placeholder-class"   bindinput="inputing"  bindblur="quick"/>

    </view>  

    <view class="cancel" bindtap="searching">{{cancel}}</view>

</view>


<scroll-view class="main" scroll-y="true" bindscrolltoupper="" bindscrolltolower="" bindscroll="" scroll-into-view="" scroll-top="">

    <block wx:for="{{moivelist}}">

        <template is="try" data="{{item}}"></template>

    </block>

</scroll-view>  

下面的列表跟前面一樣,就多個(gè)了Input和按鈕而已,同樣的wxss樣式我們就不管了,只看js。

主要代碼如下:

data: {
        moivelist: [],
        loading: true,
        cancel: "取消",
        search: ""
    }
   ,
    
    inputing: function(event) {
        if (event.detail.value) {
            this.setData({
                cancel: "搜索"
            })
        } else {
            this.setData({
                cancel: "取消"
            })
        }
    },
    //失去焦點(diǎn)事件
    quick: function(event) {
        if (!event.detail.value) {
            this.setData({
                cancel: "取消"
            })
        } else {
            this.setData({
                search: event.detail.value
            })
        }
    },
    //點(diǎn)擊搜索事件
    searching: function() {
        if (this.data.cancel === "取消") {
            wx.hideKeyboard()
        } else {          
            this.setData({
                loading: false
            })

            wx.request({
                url: url + this.data.search,
                data: {},
                header: { 'Content-Type': 'application/json' },
                success: function(res) {
                    that.setData({
                        moivelist: res.data.subjects,
                        loading: true
                    })
                }
            })
        }
    }

看起來寫了很多,其實(shí)就2件事:

* 判斷Input的值,如果為空,則讓按鈕的值為“取消”;不為空則為“搜索”。

* 根據(jù)按鈕的值綁定點(diǎn)擊事件,為取消則讓鍵盤下去(手機(jī)才行)為“搜索”則發(fā)送網(wǎng)絡(luò)請(qǐng)求,并將接收的數(shù)據(jù)保存以便循環(huán)展示出來。

到此,幾個(gè)文件就都寫好了,現(xiàn)在來對(duì)代碼優(yōu)化一下。

1. wxml:我們已經(jīng)創(chuàng)建了一個(gè)通用的模板了,好像沒得優(yōu)化了。

2. css : 可以發(fā)現(xiàn)我們幾個(gè)列表都用了一個(gè)模板,因此對(duì)應(yīng)的CSS代碼也是一樣的,我們可以把這部分CSS代碼放到app.wxss公共樣式里面,其他頁(yè)面對(duì)應(yīng)的WXSS那部分都可以刪除了。

3. js:wx.request時(shí)用到了基本相同的東西,可以放到一個(gè)單獨(dú)的js里面。

創(chuàng)建一個(gè)util文件夾,在里面創(chuàng)建一個(gè)util.js文件,用來放我們的方法。

function getData(address,datas,cb){

    wx.request({

        url: address,

        data:datas,

        header: { 'Content-Type': 'application/json' },

        success: cb

    })

}


module.exports = {

    getData: getData

}

我們定義了一個(gè)方法,并通過module.exports將他導(dǎo)出,其他頁(yè)面需要使用方法時(shí),需要先導(dǎo)入

var util = require("../../utils/utils.js")

使用時(shí):util.getData(參數(shù)1,參數(shù)2,參數(shù)3)

如:

onLoad: function() {
        util.getData(url,{},(res)=>{
          this.setData({
              moivelist: res.data.subjects,
              loading: true
          })
        })
    }

到此我們整個(gè)APP就算基本完成了,后續(xù)如果還有補(bǔ)充則再繼續(xù)添加。

代碼參見demo4 , 網(wǎng)址為:https://github.com/linrunzheng/wx-samll-demo


咨詢
微信掃碼咨詢
電話咨詢
400-888-9358