摘要:詳情數(shù)據(jù)渲染本文配套視頻地址開始前請(qǐng)把分支中的目錄導(dǎo)入微信開發(fā)工具這一節(jié)中,我們開始詳情的接口調(diào)用數(shù)據(jù)加載和視圖渲染過程。
§ 詳情 - 數(shù)據(jù)渲染
本文配套視頻地址:
https://v.qq.com/x/page/x0555...
Step 1. 引入公用的一些工具庫(kù),修改 detail.js:開始前請(qǐng)把 ch4-2 分支中的 code/ 目錄導(dǎo)入微信開發(fā)工具
這一節(jié)中,我們開始詳情的接口調(diào)用、數(shù)據(jù)加載和視圖渲染過程。
"use strict"; import util from "../../utils/index"; import config from "../../utils/config"; // WxParse HtmlFormater 用來(lái)解析 content 文本為小程序視圖 import WxParse from "../../lib/wxParse/wxParse"; // 把 html 轉(zhuǎn)為化標(biāo)準(zhǔn)安全的格式 import HtmlFormater from "../../lib/htmlFormater"; let app = getApp(); Page({ });Step 2. 修改 detail.js 在頁(yè)面初始化時(shí)候,請(qǐng)求接口,加載詳情數(shù)據(jù)
Page({ onLoad (option) { /* * 函數(shù) `onLoad` 會(huì)在頁(yè)面初始化時(shí)候加載運(yùn)行,其內(nèi)部的 `option` 是路由跳轉(zhuǎn)過來(lái)后的參數(shù)對(duì)象。 * 我們從 `option` 中解析出文章參數(shù) `contendId`,然后通過調(diào)用 `util` 中封裝好的 `request` 函數(shù)來(lái)獲取 `mock` 數(shù)據(jù)。 */ let id = option.contentId || 0; this.init(id); }, init (contentId) { if (contentId) { this.requestDetail(contentId) .then(data => { util.log(data) }) } }, requestDetail(contentId){ return util.request({ url: "detail", mock: true, data: { source: 1 } }) .then(res => { return res }) } })
運(yùn)行之后,我們查看下控制臺(tái)輸出的數(shù)據(jù),是不是很清晰!
Step 3. 接著,把頁(yè)面頭部數(shù)據(jù)渲染出來(lái)修改 requestDetail 函數(shù),并增加日期格式化的方法,達(dá)到我們想要的效果,然后重新返回?cái)?shù)據(jù)
Page({ // 此處省略部分代碼 requestDetail(contentId){ return util.request({ url: "detail", mock: true, data: { source: 1 } }) .then(res => { let formateUpdateTime = this.formateTime(res.data.lastUpdateTime) // 格式化后的時(shí)間 res.data.formateUpdateTime = formateUpdateTime return res.data }) }, formateTime (timeStr = "") { let year = timeStr.slice(0, 4), month = timeStr.slice(5, 7), day = timeStr.slice(8, 10); return `${year}/${month}/${day}`; } })
現(xiàn)在我們已經(jīng)獲取到了后端返回的數(shù)據(jù),并且已經(jīng)把部分?jǐn)?shù)據(jù)標(biāo)準(zhǔn)處理過。下一步,我們把返回的數(shù)據(jù)同步到 Model 層中(也就是 data 對(duì)象中)
我們?cè)黾?configPageData 函數(shù),用它來(lái)處理數(shù)據(jù)同步到 data的邏輯:
Page({ data: { detailData: { } }, init (contentId) { if(contentId) { this.requestDetail(contentId) .then(data => { this.configPageData(data) }) } }, configPageData(data){ if (data) { // 同步數(shù)據(jù)到 Model 層,Model 層數(shù)據(jù)發(fā)生變化的話,視圖層會(huì)自動(dòng)渲染 this.setData({ detailData: data }); //設(shè)置標(biāo)題 let title = this.data.detailData.title || config.defaultBarTitle wx.setNavigationBarTitle({ title: title }) } } })
因?yàn)轫?yè)面的標(biāo)題是隨著文章變化的,所以需要我們動(dòng)態(tài)設(shè)置,這里我們調(diào)用了小程序自帶的方法來(lái)設(shè)計(jì)
wx.setNavigationBarTitle({ title: "標(biāo)題" })
修改視圖 detail.wxml 的頭部 class="info" 內(nèi)容:
Step 4. 調(diào)用 parse 解析接口返回的 content 字段(文本內(nèi)容){{ detailData.title }} {{ detailData.author }} {{ detailData.formateUpdateTime}}
當(dāng)詳情數(shù)據(jù)返回后,我們已經(jīng)對(duì)部分?jǐn)?shù)據(jù)進(jìn)行了過濾處理,現(xiàn)在修改 detail.js 中的 init 函數(shù),增加對(duì)文章正文的處理:
articleRevert () { // this.data.detailData 是之前我們通過 setData 設(shè)置的響應(yīng)數(shù)據(jù) let htmlContent = this.data.detailData && this.data.detailData.content; WxParse.wxParse("article", "html", htmlContent, this, 0); }, init (contentId) { if (contentId) { this.requestDetail(contentId) .then(data => { this.configPageData(data) }) //調(diào)用wxparse .then(()=>{ this.articleRevert() }) } },
注意看上面的 articleRevert 函數(shù),變量 htmlContent 指向文章的正文數(shù)據(jù),當(dāng)其傳入到組件 WxParse 后,同時(shí)帶入了 5 個(gè)參數(shù)
WxParse.wxParse("article", "html", htmlContent, this, 0);
第一個(gè)參數(shù) article 很重要,在 WxParse 中,我們傳入了當(dāng)前對(duì)象 this,當(dāng)變量 htmlContent 解析之后,會(huì)把解析后的數(shù)據(jù)賦值給當(dāng)前對(duì)象,并命名為 article
所以當(dāng)文章數(shù)據(jù)解析后,當(dāng)前環(huán)境上下文中已經(jīng)存在了數(shù)據(jù) article,可以直接在 detail.wxml 中引用:
this.data.article
修改 detail.wxml,引用我們的文章正文數(shù)據(jù):
再看下頁(yè)面效果,文章已經(jīng)正常的顯示了,但我們還需要優(yōu)化下樣式,比如增加一些行高、文字間距、字體大小顏色、圖片居中等。修改樣式文件 detail.wxss,增加 以下樣式
.wrapper .content { padding: 0 36rpx; padding-bottom: 40rpx; line-height: 56rpx; color: #333; font-size: 36rpx; overflow: hidden; word-wrap: break-word } .wrapper .content .langs_cn,.wrapper .content .para.translate { font-size: 32rpx; color: #666 } .wrapper .content .langs_cn,.wrapper .content .langs_en,.wrapper .content .para,.wrapper .content .wxParse-p { margin: 44rpx 0 } .wrapper .content image { max-width: 100%; vertical-align: top } .wrapper .content .tip { color: #999; font-size: 28rpx; text-align: center; height: 28rpx; line-height: 28rpx } .wrapper .content .tip-icon { vertical-align: top; margin-right: 8rpx; width: 26rpx; height: 26rpx; border: 1px solid #999; border-radius: 6rpx; box-sizing: border-box } .wrapper .content .tip-icon.selected { border: none; background: url(https://n1image.hjfile.cn/mh/2017/06/12/20703f295b7b3ee4f5fe077c4e464283.png) 0 0 no-repeat; background-size: contain }
iKcamp官網(wǎng):http://www.ikcamp.com
訪問官網(wǎng)更快閱讀全部免費(fèi)分享課程:《iKcamp出品|全網(wǎng)最新|微信小程序|基于最新版1.0開發(fā)者工具之初中級(jí)培訓(xùn)教程分享》。
包含:文章、視頻、源代碼
【11月11號(hào)】上海iKcamp最新活動(dòng)iKcamp原創(chuàng)新書《移動(dòng)Web前端高效開發(fā)實(shí)戰(zhàn)》已在亞馬遜、京東、當(dāng)當(dāng)開售。
報(bào)名地址:http://www.huodongxing.com/ev...
與“天天練口語(yǔ)”小程序總榜排名第四、教育類排名第一的研發(fā)團(tuán)隊(duì),面對(duì)面溝通交流。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/89414.html
摘要:詳情數(shù)據(jù)渲染本文配套視頻地址開始前請(qǐng)把分支中的目錄導(dǎo)入微信開發(fā)工具這一節(jié)中,我們開始詳情的接口調(diào)用數(shù)據(jù)加載和視圖渲染過程。 § 詳情 - 數(shù)據(jù)渲染 本文配套視頻地址:https://v.qq.com/x/page/x0555... 開始前請(qǐng)把 ch4-2 分支中的 code/ 目錄導(dǎo)入微信開發(fā)工具 這一節(jié)中,我們開始詳情的接口調(diào)用、數(shù)據(jù)加載和視圖渲染過程。 Step 1. 引入公...
摘要:詳情數(shù)據(jù)渲染本文配套視頻地址開始前請(qǐng)把分支中的目錄導(dǎo)入微信開發(fā)工具這一節(jié)中,我們開始詳情的接口調(diào)用數(shù)據(jù)加載和視圖渲染過程。 § 詳情 - 數(shù)據(jù)渲染 本文配套視頻地址:https://v.qq.com/x/page/x0555... 開始前請(qǐng)把 ch4-2 分支中的 code/ 目錄導(dǎo)入微信開發(fā)工具 這一節(jié)中,我們開始詳情的接口調(diào)用、數(shù)據(jù)加載和視圖渲染過程。 Step 1. 引入公...
摘要:微信小程序課程,面向所有具備前端基礎(chǔ)知識(shí)的同學(xué)閱讀要求讀者需要具備但不限于以下技能更佳一共四部分十五小節(jié),適合七天的訓(xùn)練營(yíng)。 ?? 微信小程序課程,面向所有具備前端基礎(chǔ)知識(shí)的同學(xué) ?? 閱讀要求 讀者需要具備但不限于以下技能 HTML JavaScript es6更佳 CSS 一共四部分十五小節(jié),適合七天的訓(xùn)練營(yíng)。 從現(xiàn)在開始,我假裝你已經(jīng)掌握了 html、 css以及 ES6...
摘要:微信小程序課程,面向所有具備前端基礎(chǔ)知識(shí)的同學(xué)閱讀要求讀者需要具備但不限于以下技能更佳一共四部分十五小節(jié),適合七天的訓(xùn)練營(yíng)。 ?? 微信小程序課程,面向所有具備前端基礎(chǔ)知識(shí)的同學(xué) ?? 閱讀要求 讀者需要具備但不限于以下技能 HTML JavaScript es6更佳 CSS 一共四部分十五小節(jié),適合七天的訓(xùn)練營(yíng)。 從現(xiàn)在開始,我假裝你已經(jīng)掌握了 html、 css以及 ES6...
摘要:微信小程序課程,面向所有具備前端基礎(chǔ)知識(shí)的同學(xué)閱讀要求讀者需要具備但不限于以下技能更佳一共四部分十五小節(jié),適合七天的訓(xùn)練營(yíng)。 ?? 微信小程序課程,面向所有具備前端基礎(chǔ)知識(shí)的同學(xué) ?? 閱讀要求 讀者需要具備但不限于以下技能 HTML JavaScript es6更佳 CSS 一共四部分十五小節(jié),適合七天的訓(xùn)練營(yíng)。 從現(xiàn)在開始,我假裝你已經(jīng)掌握了 html、 css以及 ES6...
閱讀 3190·2021-10-14 09:42
閱讀 3569·2019-08-26 13:56
閱讀 3474·2019-08-26 11:59
閱讀 945·2019-08-23 18:00
閱讀 2211·2019-08-23 17:51
閱讀 3531·2019-08-23 17:17
閱讀 1485·2019-08-23 15:11
閱讀 5191·2019-08-23 15:05