最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

微信小程序:期刊切換,代碼重構(gòu),緩存Storage,setStorageSync,wx:if【詩書畫唱】

2021-06-12 00:31 作者:詩書畫唱  | 我要投稿



目錄:



例子1:根據(jù)index判斷是第一期還是最后一期

classicModel中的isFirst和isLatest方法,緩存(Storage)最新期刊號_setLatest方法

首先的話,我們點擊前一期翻頁的“右耳朵”圖片的時候,要觸發(fā)一個可以傳含有特定的參數(shù)值的url路徑到后臺的getPrev的函數(shù),之后后臺代碼根據(jù)url從數(shù)據(jù)庫查到特定的參數(shù)值為SQL語句中的where后面的篩選條件的后臺數(shù)據(jù),之后前臺獲取后臺數(shù)據(jù)。getPrev的函數(shù)也是寫在models文件夾下的js文件中的。封裝,要復(fù)用,在別處要多次重復(fù)調(diào)用,進行了代碼重構(gòu)的代碼一般都寫在models文件夾下的js文件中。



用setStorageSync來把數(shù)據(jù)緩存到自己命名的變量名中,點"調(diào)試器"后,可以在Storage查看自己是否緩存成功,可以查看Key(鍵,變量名),Vue(值,數(shù)據(jù)的具體內(nèi)容),Type(數(shù)據(jù)類型)


清除緩存的方法(不清的話,基本重啟等候都會一直存在緩存)


一般是在models文件夾下的classic.js中聲明和調(diào)用關(guān)于wx.setStrorageSync等緩存的代碼的


為了讓使用者先看到最新的一期,所以進行如下的設(shè)計:這里左邊的翻頁“耳朵”是"翻到下一頁(更新的一期)",這里右邊的翻頁“耳朵”是"翻到上一頁(往前的一期)"

例子2:實現(xiàn)期刊切換后一期效果


圖示中的往前翻,和往后翻的代碼基本都是一樣的,因此可以進行代碼重構(gòu),封裝


代碼等等要盡可能的進行封裝,方便后期的維護,修改一個封裝的部分就可以同時修改調(diào)用封裝代碼的部分


這里就是對代碼進行了封裝

例子3:對封裝代碼進行優(yōu)化,把一些callback改成success,方便對ajax獲取到的數(shù)據(jù)進行處理



ajax獲取到的數(shù)據(jù)就是在success中進行處理



例子4:解決model中的回調(diào)函數(shù)處理bug和大圖片顯示bug



子組件都要用的大圖片路徑的部分,其實要寫在關(guān)于Behavior的文件夾下的js文件中(因為data.image的部分是多個子組件都要用的部分,所以可以可以在Behavior中聲明個base_img的屬性名,data.image的部分就是base_img的屬性名對應(yīng)的值。


下面用了解構(gòu)語法,代碼變得更簡潔了,在import的同時,就給一個變量進行了賦值,之后就直接調(diào)用這個變量就可以了



注意這里的base_img對應(yīng)的內(nèi)容寫錯了,如果不改過來,會導致bug。很多bug都可能是因為變量名寫錯或有些代碼沒有注釋



用wx:if進行判斷有時可以解決渲染層網(wǎng)絡(luò)層出錯,防止加載圖片之間,界面就被渲染出來了。用wx:if進行判斷是否加載圖片為空,不為空,說明圖片不為空,那么就執(zhí)行判斷里面的代碼


例子5:代碼部分和講義

現(xiàn)在我們是只實現(xiàn)了電影組件的部分,音樂等組件的部分以后再做。


要改動的文件:

components/classic/movie/index.wxml

components/classic/classic_beh.js

models/classic.js

pages/classic/index.js

pages/classic/index.wxml

例子1:根據(jù)index判斷是第一期還是最后一期

classicModel中的isFirst和isLatest方法,緩存(Storage)最新期刊號_setLatest方法




首先的話,我們點擊前一期翻頁的“右耳朵”圖片的時候,要觸發(fā)一個可以傳含有特定的參數(shù)值的url路徑到后臺的getPrev的函數(shù),之后后臺代碼根據(jù)url從數(shù)據(jù)庫查到特定的參數(shù)值為SQL語句中的where后面的篩選條件的后臺數(shù)據(jù),之后前臺獲取后臺數(shù)據(jù)。getPrev的函數(shù)也是寫在models文件夾下的js文件中的。封裝,要復(fù)用,在別處要多次重復(fù)調(diào)用,進行了代碼重構(gòu)的代碼一般都寫在models文件夾下的js文件中。

Q:如果出現(xiàn)"渲染層網(wǎng)絡(luò)層錯誤",出現(xiàn)image的字眼等等,如何解決

A:查看是不是圖片的路徑出錯,修改下關(guān)于圖片的代碼

移動到下面關(guān)于getPrev的函數(shù)里面
改前
改后(例子1中暫時這么寫)

值得注意的是,改后的代碼中關(guān)于組件的圖片路徑的data.image的部分,其實要寫在關(guān)于Behavior的文件夾下的js文件中(因為data.image的部分是多個子組件都要用的部分,所以可以可以在Behavior中聲明個base_img的屬性名,data.image的部分就是base_img的屬性名對應(yīng)的值。




用setStorageSync來把數(shù)據(jù)緩存到自己命名的變量名中,點"調(diào)試器"后,可以在Storage查看自己是否緩存成功,可以查看Key(鍵,變量名),Vue(值,數(shù)據(jù)的具體內(nèi)容),Type(數(shù)據(jù)類型)

此圖中得緩存功能的代碼的位置寫得不對,應(yīng)該寫別處

清除緩存的方法(不清的話,基本重啟等候都會一直存在緩存)

如果要清除,一般是全部清除

一般是在models文件夾下的classic.js中聲明和調(diào)用關(guān)于wx.setStrorageSync等緩存的代碼的

聲明
調(diào)用

為了讓使用者先看到最新的一期,所以進行如下的設(shè)計:這里左邊的翻頁“耳朵”是"翻到下一頁(更新的一期)",這里右邊的翻頁“耳朵”是"翻到上一頁(往前的一期)"

例子2:實現(xiàn)期刊切換后一期效果

代碼等等要盡可能的進行封裝,方便后期的維護,修改一個封裝的部分就可以同時修改調(diào)用封裝代碼的部分

圖示中的往前翻,和往后翻的代碼基本都是一樣的,因此可以進行代碼重構(gòu),封裝
這里就是對代碼進行了封裝


例子3:對封裝代碼進行優(yōu)化,把一些callback改成success,方便對ajax獲取到的數(shù)據(jù)進行處理


ajax獲取到的數(shù)據(jù)就是在success中進行處理


例子4:解決model中的回調(diào)函數(shù)處理bug和大圖片顯示bug




子組件都要用的大圖片路徑的部分,其實要寫在關(guān)于Behavior的文件夾下的js文件中(因為data.image的部分是多個子組件都要用的部分,所以可以可以在Behavior中聲明個base_img的屬性名,data.image的部分就是base_img的屬性名對應(yīng)的值。


注意這里的base_img對應(yīng)的內(nèi)容寫錯了,如果不改過來,會導致bug。很多bug都可能是因為變量名寫錯或有些代碼沒有注釋



下面用了解構(gòu)語法,代碼變得更簡潔了,在import的同時,就給一個變量進行了賦值,之后就直接調(diào)用這個變量就可以了

如果報錯,就暫時不用解構(gòu)語法,用上面的方法。個人認為,解構(gòu)語法是用于功能實現(xiàn)后,進行代碼簡化用的




用wx:if進行判斷有時可以解決渲染層網(wǎng)絡(luò)層出錯,防止加載圖片之間,界面就被渲染出來了。用wx:if進行判斷是否加載圖片為空,不為空,說明圖片不為空,那么就執(zhí)行判斷里面的代碼



例子5:代碼部分和講義

準備:后臺代碼處理

一、創(chuàng)建新項目和頁面

二、app.json配置導航欄

三、定義和使用點贊組件

"四、classic在生命周期函數(shù)中請求后臺數(shù)據(jù)

設(shè)置-項目設(shè)置-勾選不校驗..."

五、封裝Http工具類。

六、將classic頁面的數(shù)據(jù)傳遞到like組件中(父組件傳數(shù)據(jù)到子組件)

七、實現(xiàn)movie組件

八、like組件傳遞數(shù)據(jù)到classic頁面(子傳父實現(xiàn)自定義事件)

"九、epsoide組件(組件的生命周期函數(shù)以及data和properties定義數(shù)據(jù)的區(qū)別)

data和properties會被合并成同一個對象,如果有同名屬性,會使用properties中定義的屬性

期刊號補零(observer函數(shù))"

"十、初步完成導航組件

獲取數(shù)據(jù):title,isFirst和isLatest

自定義導航事件onLeft,onRight

禁用左翻頁和右翻頁"

十一、初步實現(xiàn)music組件和essay組件

十二、提取組件的公共部分(組件的行為Behavior實現(xiàn)多繼承)

"十三、初步實現(xiàn)期刊切換前一期效果(后臺getClassic實現(xiàn))

classic頁面的onPrev"

"十四、根據(jù)index判斷是第一期還是最后一期

classicModel中的isFirst和isLatest方法,緩存(Storage)最新期刊號_setLatest方法"

"十五、實現(xiàn)期刊切換后一期效果

classic頁面的onNext

classicModel中的getNext和getPrev代碼重構(gòu)

classic頁面的onPrev和onNext代碼重構(gòu)"

十六、期刊數(shù)據(jù)數(shù)據(jù)緩存實現(xiàn),(model中的回調(diào)函數(shù)處理bug和大圖片顯示bug)

十七、緩存數(shù)據(jù)以后無法顯示更新后的點贊次數(shù)和狀態(tài)(后臺代碼getClassic擴展)

紅字部分為已經(jīng)實現(xiàn)的功能


要改動的文件:



<!--components/classic/movie/index.wxml-->

<view?class="container">

????<image?src="{{base_img?+?img}}"??class="img"/>

????<image?src="{{icon}}"?class="tag"/>

????<text?class="content">{{content}}</text>

</view>




//components/classic/classic_beh.js

import?config?from?'../../config'

export?default?Behavior({

??properties:?{

????img:?String,

????content:?String

??}


//music等子組件要共用的base_img部分?START

??,

??data:?{

????base_img:?config.img_url

??}

//music等子組件要共用的base_img部分?END

})




現(xiàn)在我們是只實現(xiàn)了電影組件的部分,音樂等組件的部分以后再做。

//models/classic.js

import?Http?from?'../utils/http.js'

import?config?from?'../config.js'

export?default?class?ClassicModel?extends?Http{

??//獲取最新的期刊數(shù)據(jù)

??getLatest(cb){

????this.ajax({

??????url:?`${config.base_url}getLatest`,

??????//?callback:?data?=>?{

??????//???cb(data);

??????//???//自己寫的代碼?START

??????//???console.log("models/classic.js中打印的數(shù)據(jù):",data)

??????//????//自己寫的代碼?END

??????//?}

??????success:?data?=>?{

????????this._setLastedIndex(data.index)

????????cb(data)

?????????//???//自己寫的代碼?START

???????console.log("models/classic.js中打印的數(shù)據(jù):",data)

??????//????//自己寫的代碼?END

??????}

????})

??}

??//關(guān)于數(shù)據(jù)庫和頁面的點贊數(shù)同步更新的部分?START

??//更新點贊狀態(tài)

??like(data){

????this.ajax({

??????url:?`${config.base_url}like`,

??????data

????})

??}

??//關(guān)于數(shù)據(jù)庫和頁面的點贊數(shù)同步更新的部分?END


//關(guān)于翻頁更新對應(yīng)后臺數(shù)據(jù)庫數(shù)據(jù)功能的部分?START

??getClassic(index,status,callback)?{

????this.ajax({

??????url:?`${config.base_url}getClassic`,

??????data:?{

????????index,

????????status

??????},

??????success:?res?=>?{

????????callback(res)

??????}

????})

??}

??//將index緩存到內(nèi)存中

??_setLastedIndex(index){

????wx.setStorageSync('latestIndex',?index)

??}

??//獲取緩存的最新期刊號

??_getLastedIndex(){

????return?wx.getStorageSync('latestIndex')

??}

??//判斷當前的期刊是否是第一期

??isFirst(index){

????return?index?===?1?

??}

??//判斷當前的期刊是否是最后一期

??isLatest(index){

????let?lastedIndex?=?this._getLastedIndex()

????return?index?===?lastedIndex

??}

//關(guān)于翻頁更新對應(yīng)后臺數(shù)據(jù)庫數(shù)據(jù)功能的部分?END


}

//?pages/classic/index.js

import?ClassicModel?from?'../../models/classic.js'

??//關(guān)于數(shù)據(jù)庫和頁面的點贊數(shù)同步更新的部分?START

import?config?from?'../../config.js'

??//關(guān)于數(shù)據(jù)庫和頁面的點贊數(shù)同步更新的部分?END

const?classicModel?=?new?ClassicModel()

Page({


??/**

???*?頁面的初始數(shù)據(jù)

???*/

??//?data:?{

??//???classicData:?null

????

??//?},

??data:?{

????classicData:?null,

????isFirst:?false,

????isLatest:?true

??},


??/**

???*?生命周期函數(shù)--監(jiān)聽頁面加載

???*/

??onLoad:?function?(options)?{

????classicModel.getLatest(data?=>?{

??????console.log("pages/classic/index.js中打印的數(shù)據(jù):",data)

??????//關(guān)于數(shù)據(jù)庫和頁面的點贊數(shù)同步更新的部分?START

??????//?console.log(data)

??????//修改image屬性的內(nèi)容:

??????//?data.image?=?config.img_url?+?data.image

??????//關(guān)于數(shù)據(jù)庫和頁面的點贊數(shù)同步更新的部分?END

??????//更新數(shù)據(jù)

??????this.setData({

????????classicData:?data

??????})

????})

??},


//關(guān)于數(shù)據(jù)庫和頁面的點贊數(shù)同步更新的部分?START

??onLike(e){

????console.log("詩書畫唱提醒你,點擊后觸發(fā)了pages/classic/index.js中的onlike方法")

????//更新點贊的狀態(tài)

????console.log("點贊數(shù)",e.detail.nums)

????classicModel.like({

??????status:?e.detail.state,

??????index:?this.data.classicData.index,

??????nums:?e.detail.nums

????})

??},

//關(guān)于數(shù)據(jù)庫和頁面的點贊數(shù)同步更新的部分?END


//導航欄的左翻頁和右翻頁部分?START

??onNext(){

????console.log('獲取下一期的期刊數(shù)據(jù)')

????this._updateClassic('next')

??},

??onPrev(){

????console.log('獲取上一期的期刊數(shù)據(jù)')

????this._updateClassic('prev')

??},


??_updateClassic(nextOrPrev){

????//獲取當前的期刊號

????let?index?=?this.data.classicData.index

????classicModel.getClassic(index,nextOrPrev,data?=>?{

??????//更新數(shù)據(jù)

??????this.setData({

????????classicData:?data,

????????isFirst:?classicModel.isFirst(data.index),

????????isLatest:?classicModel.isLatest(data.index)

??????})

????})

??},


//導航欄的左翻頁和右翻頁部分?END


??/**

???*?生命周期函數(shù)--監(jiān)聽頁面初次渲染完成

???*/

??onReady:?function?()?{


??},


??/**

???*?生命周期函數(shù)--監(jiān)聽頁面顯示

???*/

??onShow:?function?()?{


??},


??/**

???*?生命周期函數(shù)--監(jiān)聽頁面隱藏

???*/

??onHide:?function?()?{


??},


??/**

???*?生命周期函數(shù)--監(jiān)聽頁面卸載

???*/

??onUnload:?function?()?{


??},


??/**

???*?頁面相關(guān)事件處理函數(shù)--監(jiān)聽用戶下拉動作

???*/

??onPullDownRefresh:?function?()?{


??},


??/**

???*?頁面上拉觸底事件的處理函數(shù)

???*/

??onReachBottom:?function?()?{


??},


??/**

???*?用戶點擊右上角分享

???*/

??onShareAppMessage:?function?()?{


??}

})


<!--pages/classic/index.wxml-->

<view?class="container">


????<view?class="header">

????????<cmp-epsoide?class="epsoide"?index="{{classicData.index}}"></cmp-epsoide>

????????<!--?下面的話就是調(diào)用了點贊的組件:?-->?????

????????<cmp-like?count="{{classicData.fav_nums}}"?like="{{classicData.like_status}}"?

????????bind:myLike="onLike"></cmp-like>

????</view>


????<cmp-movie?wx:if="{{classicData.image}}"?content="{{classicData.content}}"?img="{{classicData.image}}"></cmp-movie>


????<cmp-navi?class="navi"?title="{{classicData.title}}"?isFirst="{{isFirst}}"??

????isLatest="{{isLatest}}"?bind:myLeft="onNext"

????????bind:myRight="onPrev"></cmp-navi>


</view>

運行效果

本文寫完時的時間


微信小程序:期刊切換,代碼重構(gòu),緩存Storage,setStorageSync,wx:if【詩書畫唱】的評論 (共 條)

分享到微博請遵守國家法律
城口县| 敖汉旗| 崇阳县| 江永县| 朝阳市| 福贡县| 丽水市| 宣化县| 莱西市| 宁乡县| 河池市| 桓仁| 锦州市| 六盘水市| 丹棱县| 万安县| 屏东市| 墨江| 普格县| 界首市| 都匀市| 萨迦县| 兰溪市| 万盛区| 阿瓦提县| 东光县| 万荣县| 邯郸县| 蒙城县| 黄梅县| 博罗县| 舒城县| 正镶白旗| 凌海市| 陕西省| 澄江县| 朝阳市| 当阳市| 菏泽市| 桐柏县| 穆棱市|