摘要:詳情數據渲染本文配套視頻地址開始前請把分支中的目錄導入微信開發工具這一節中,我們開始詳情的接口調用數據加載和視圖渲染過程。
§ 詳情 - 數據渲染
本文配套視頻地址:
https://v.qq.com/x/page/x0555...
Step 1. 引入公用的一些工具庫,修改 detail.js:開始前請把 ch4-2 分支中的 code/ 目錄導入微信開發工具
這一節中,我們開始詳情的接口調用、數據加載和視圖渲染過程。
"use strict"; import util from "../../utils/index"; import config from "../../utils/config"; // WxParse HtmlFormater 用來解析 content 文本為小程序視圖 import WxParse from "../../lib/wxParse/wxParse"; // 把 html 轉為化標準安全的格式 import HtmlFormater from "../../lib/htmlFormater"; let app = getApp(); Page({ });Step 2. 修改 detail.js 在頁面初始化時候,請求接口,加載詳情數據
Page({ onLoad (option) { /* * 函數 `onLoad` 會在頁面初始化時候加載運行,其內部的 `option` 是路由跳轉過來后的參數對象。 * 我們從 `option` 中解析出文章參數 `contendId`,然后通過調用 `util` 中封裝好的 `request` 函數來獲取 `mock` 數據。 */ 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 }) } })
運行之后,我們查看下控制臺輸出的數據,是不是很清晰!
Step 3. 接著,把頁面頭部數據渲染出來修改 requestDetail 函數,并增加日期格式化的方法,達到我們想要的效果,然后重新返回數據
Page({ // 此處省略部分代碼 requestDetail(contentId){ return util.request({ url: "detail", mock: true, data: { source: 1 } }) .then(res => { let formateUpdateTime = this.formateTime(res.data.lastUpdateTime) // 格式化后的時間 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}`; } })
現在我們已經獲取到了后端返回的數據,并且已經把部分數據標準處理過。下一步,我們把返回的數據同步到 Model 層中(也就是 data 對象中)
我們增加 configPageData 函數,用它來處理數據同步到 data的邏輯:
Page({ data: { detailData: { } }, init (contentId) { if(contentId) { this.requestDetail(contentId) .then(data => { this.configPageData(data) }) } }, configPageData(data){ if (data) { // 同步數據到 Model 層,Model 層數據發生變化的話,視圖層會自動渲染 this.setData({ detailData: data }); //設置標題 let title = this.data.detailData.title || config.defaultBarTitle wx.setNavigationBarTitle({ title: title }) } } })
因為頁面的標題是隨著文章變化的,所以需要我們動態設置,這里我們調用了小程序自帶的方法來設計
wx.setNavigationBarTitle({ title: "標題" })
修改視圖 detail.wxml 的頭部 class="info" 內容:
Step 4. 調用 parse 解析接口返回的 content 字段(文本內容){{ detailData.title }} {{ detailData.author }} {{ detailData.formateUpdateTime}}
當詳情數據返回后,我們已經對部分數據進行了過濾處理,現在修改 detail.js 中的 init 函數,增加對文章正文的處理:
articleRevert () { // this.data.detailData 是之前我們通過 setData 設置的響應數據 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) }) //調用wxparse .then(()=>{ this.articleRevert() }) } },
注意看上面的 articleRevert 函數,變量 htmlContent 指向文章的正文數據,當其傳入到組件 WxParse 后,同時帶入了 5 個參數
WxParse.wxParse("article", "html", htmlContent, this, 0);
第一個參數 article 很重要,在 WxParse 中,我們傳入了當前對象 this,當變量 htmlContent 解析之后,會把解析后的數據賦值給當前對象,并命名為 article
所以當文章數據解析后,當前環境上下文中已經存在了數據 article,可以直接在 detail.wxml 中引用:
this.data.article
修改 detail.wxml,引用我們的文章正文數據:
再看下頁面效果,文章已經正常的顯示了,但我們還需要優化下樣式,比如增加一些行高、文字間距、字體大小顏色、圖片居中等。修改樣式文件 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官網:http://www.ikcamp.com
訪問官網更快閱讀全部免費分享課程:《iKcamp出品|全網最新|微信小程序|基于最新版1.0開發者工具之初中級培訓教程分享》。
包含:文章、視頻、源代碼
【11月11號】上海iKcamp最新活動iKcamp原創新書《移動Web前端高效開發實戰》已在亞馬遜、京東、當當開售。
報名地址:http://www.huodongxing.com/ev...
與“天天練口語”小程序總榜排名第四、教育類排名第一的研發團隊,面對面溝通交流。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/51444.html
摘要:詳情數據渲染本文配套視頻地址開始前請把分支中的目錄導入微信開發工具這一節中,我們開始詳情的接口調用數據加載和視圖渲染過程。 § 詳情 - 數據渲染 本文配套視頻地址:https://v.qq.com/x/page/x0555... 開始前請把 ch4-2 分支中的 code/ 目錄導入微信開發工具 這一節中,我們開始詳情的接口調用、數據加載和視圖渲染過程。 Step 1. 引入公...
摘要:詳情數據渲染本文配套視頻地址開始前請把分支中的目錄導入微信開發工具這一節中,我們開始詳情的接口調用數據加載和視圖渲染過程。 § 詳情 - 數據渲染 本文配套視頻地址:https://v.qq.com/x/page/x0555... 開始前請把 ch4-2 分支中的 code/ 目錄導入微信開發工具 這一節中,我們開始詳情的接口調用、數據加載和視圖渲染過程。 Step 1. 引入公...
摘要:微信小程序課程,面向所有具備前端基礎知識的同學閱讀要求讀者需要具備但不限于以下技能更佳一共四部分十五小節,適合七天的訓練營。 ?? 微信小程序課程,面向所有具備前端基礎知識的同學 ?? 閱讀要求 讀者需要具備但不限于以下技能 HTML JavaScript es6更佳 CSS 一共四部分十五小節,適合七天的訓練營。 從現在開始,我假裝你已經掌握了 html、 css以及 ES6...
摘要:微信小程序課程,面向所有具備前端基礎知識的同學閱讀要求讀者需要具備但不限于以下技能更佳一共四部分十五小節,適合七天的訓練營。 ?? 微信小程序課程,面向所有具備前端基礎知識的同學 ?? 閱讀要求 讀者需要具備但不限于以下技能 HTML JavaScript es6更佳 CSS 一共四部分十五小節,適合七天的訓練營。 從現在開始,我假裝你已經掌握了 html、 css以及 ES6...
摘要:微信小程序課程,面向所有具備前端基礎知識的同學閱讀要求讀者需要具備但不限于以下技能更佳一共四部分十五小節,適合七天的訓練營。 ?? 微信小程序課程,面向所有具備前端基礎知識的同學 ?? 閱讀要求 讀者需要具備但不限于以下技能 HTML JavaScript es6更佳 CSS 一共四部分十五小節,適合七天的訓練營。 從現在開始,我假裝你已經掌握了 html、 css以及 ES6...
閱讀 3640·2023-04-26 02:07
閱讀 3149·2021-09-22 15:55
閱讀 2533·2021-07-26 23:38
閱讀 3118·2019-08-29 15:16
閱讀 2008·2019-08-29 11:16
閱讀 1745·2019-08-29 11:00
閱讀 3582·2019-08-26 18:36
閱讀 3163·2019-08-26 13:32