微信小程序?qū)崿F(xiàn)動(dòng)態(tài)渲染Markdown示例詳解
需求
十幾個(gè)圖文編排的介紹文章,每個(gè)頁面的結(jié)構(gòu)、內(nèi)容都不相同,
因此沒有辦法通過WXML代碼把文章結(jié)構(gòu)固定下來。
因此筆者想到的解決方案包括:
- 全部轉(zhuǎn)成長截圖,好處是代碼超級簡單,壞處是:即使只改一個(gè)字,也要重新生成、上傳截圖
- 全部用原生小程序硬編碼出來,每個(gè)介紹文章寫一個(gè)組件。雖然后期修改靈活,但過于低效且麻煩。
考慮到對于圖文編排來說,markdown的效率遠(yuǎn)高于HTML,如果有辦法把markdown文檔渲染成小程序頁面,以上的需求就能很好的解決。
查了一下,還真有,倉庫地址:Towxml
構(gòu)建
名字非常簡單粗暴:to wxml,就是把markdown或HTML轉(zhuǎn)換成WXML。
作者說這個(gè)包不建議從NPM上獲取,而應(yīng)該自己使用源碼構(gòu)建:
// clone倉庫 git clone https://github.com/sbfkcel/towxml.git // 進(jìn)入文件夾 cd towxml // 安裝依賴 npm install // 構(gòu)建 npm run build
構(gòu)建完成后,把dist文件夾復(fù)制到小程序的/miniprogram/
路徑下(和app.ts、pages等目錄同級):
在小程序的app.ts
中添加towxml:require('/towxml/index')
:
/** * app.ts * TS小程序的App泛型可能和引入的組件不兼容,可以改成any */ App<any>({ globalData: {}, towxml:require('/towxml/index'), onLaunch() { }, })
在需要使用的頁面json中添加組件引用:
{ "usingComponents": { "towxml":"/towxml/towxml" } }
頁面V層(wxml文件):
<!--index.wxml--> <view class="container"> <towxml nodes="{{article}}"/> </view>
頁面C層(ts文件):
//獲取應(yīng)用實(shí)例 const app = getApp(); // data中添加兩個(gè)變量 Page({ data: { isLoading: true, // 判斷是否尚在加載中 article: {} // 內(nèi)容數(shù)據(jù) }, })
使用
官方文檔鏈接:鏈接
文檔中寫到,在onload方法中初始化,就可以渲染markdown文本了,最終作用在上文寫的towxml標(biāo)簽上:
onLoad: function () { let result = app.towxml('# Markdown', 'markdown',{ base:'https://xxx.com', // 相對資源的base路徑 theme:'light', // 主題,默認(rèn)`light` events:{ // 為元素綁定的事件方法 tap:(e)=>{ console.log('tap',e); } } }); // 更新解析數(shù)據(jù) this.setData({ article:result, isLoading: false }); }
towxml方法的三個(gè)參數(shù):
- 文本型,必填。就是實(shí)際需要渲染的文本,上述代碼的
#Markdown
渲染出來就是一級標(biāo)題 - 文本型,必填。表示類型,本文只用到markdown所以寫'markdown'即可
- 對象,必填。表示渲染時(shí)的參數(shù),具體可以看文檔,比如,主題可以改成亮色或暗色。
接下來需要解決一個(gè)問題:
上述代碼的markdown文本是直接寫在代碼里的,實(shí)際應(yīng)用肯定需要從后端獲取
因此先寫一個(gè)獲取文本的方法:
// 獲取markdown文本 getText: (url, callback) => { wx.request({ url: url, header: { 'content-type': 'application/x-www-form-urlencoded' }, success: (res) => { if (typeof callback === 'function') { callback(res); }; } }); },
然后改寫一下原來的onload:
onLoad: function () { // 獲取文本,第一個(gè)參數(shù)指向后端的文件地址(你需要起一個(gè)后端) this.getText('http://127.0.0.1:8080/test.md', res => { // 回調(diào)函數(shù)中完成更新數(shù)據(jù)的邏輯 let result = app.towxml(res.data, 'markdown',{ base:'https://xxx.com', theme:'light', events:{ tap:(e)=>{ console.log('tap',e); } } }); // 更新解析數(shù)據(jù) this.setData({ article:result, isLoading: false }); }) }
此時(shí)就可以渲染來自HTTP的markdown文件了:
最后通過參數(shù)修改請求地址就可以靈活控制頁面中的文本了。
總結(jié)
如果用傳統(tǒng)方式,真的把十幾篇二十幾篇文章做成頁面,沒個(gè)一兩天寫不完。用markdown渲染的方式一個(gè)小時(shí)應(yīng)該就能結(jié)束戰(zhàn)斗,效率起飛。
作為程序員,能動(dòng)腦子的事情,絕對不用重復(fù)勞動(dòng),能用自動(dòng)化解決的問題,絕對不動(dòng)手。
以上就是微信小程序?qū)崿F(xiàn)動(dòng)態(tài)渲染Markdown示例詳解的詳細(xì)內(nèi)容,更多關(guān)于微信小程序動(dòng)態(tài)渲染Markdown的資料請關(guān)注腳本之家其它相關(guān)文章!
- python使用html2text庫實(shí)現(xiàn)從HTML轉(zhuǎn)markdown的方法詳解
- python 自動(dòng)化將markdown文件轉(zhuǎn)成html文件的方法
- Python?mistune庫靈活的Markdown解析器使用實(shí)例探索
- Python自動(dòng)創(chuàng)建Markdown表格使用實(shí)例探究
- uniapp中解析markdown支持網(wǎng)頁和小程序?qū)崿F(xiàn)示例
- 一款功能強(qiáng)大的markdown編輯器tui.editor使用示例詳解
- umi插件開發(fā)仿dumi項(xiàng)目加載markdown文件實(shí)現(xiàn)詳解
- unified如何處理markdown解析器詳解
- python markdown轉(zhuǎn)html自定義實(shí)現(xiàn)工具解析
相關(guān)文章
兼容IE和Firefox火狐的上下、左右循環(huán)無間斷滾動(dòng)JS代碼
html里的marqueen也能實(shí)現(xiàn)內(nèi)容的滾動(dòng),但滾動(dòng)是間斷的,運(yùn)用JavaScript可以使這一問題得到改觀,實(shí)現(xiàn)無間斷的滾動(dòng),讓頁面看起來更美觀2013-04-04javascript中BOM基礎(chǔ)知識總結(jié)
本文主要對javascript中BOM基礎(chǔ)知識進(jìn)行總結(jié)。具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02使用Promise和JavaScript有效處理1000個(gè)請求的方法
在現(xiàn)代Web開發(fā)中,處理高并發(fā)請求是一個(gè)常見的挑戰(zhàn),當(dāng)我們需要從服務(wù)器獲取大量數(shù)據(jù)或執(zhí)行多個(gè)異步任務(wù)時(shí),如何有效地管理請求的并發(fā)性和性能變得至關(guān)重要,本文將介紹如何使用Promise和JavaScript來管理高并發(fā)請求,需要的朋友可以參考下2023-09-09JS中Generator函數(shù)與async函數(shù)用法介紹
javascript中經(jīng)常會(huì)用到異步編程,在ES6之后我們使用的?Generator函數(shù)、async函數(shù)、promise都是我們異步編程的一大助力,這里我們主要講解Generator、async函數(shù),并且簡介他們之間的一些聯(lián)系,本篇文章會(huì)帶著一些簡易案例,方便大家理解使用2023-06-06jQuery多項(xiàng)選項(xiàng)卡的實(shí)現(xiàn)思路附樣式及代碼
這篇文章主要介紹了jQuery多項(xiàng)選項(xiàng)卡的實(shí)現(xiàn)思路,需要的朋友可以參考下2014-06-06Bootstrap 模態(tài)框多次顯示后臺提交多次BUG的解決方法
本篇文章主要介紹了Bootstrap 模態(tài)框多次顯示后臺提交多次BUG的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12