解析Markdown文件
上一节,我们将了使用网络请求后台数据,当我们取到后台数据后,赋值给artList,这样首页页面就是展示了文章列表。当我们点击文章列表中的某项时,会再次请求后台,获取文章的详情。文章的详情我们是Markdown数据。
在小程序中,无法直接展示Markdown数据,我们需要转换,将Markdown转换为WXML,网上的大神很多,有多款Markdown转WXML库,我使用的是towxml库。
按照towxml库的说明文档,我们将编译后的towxml复制到我们的项目中,然后在app.js文件中引入这个组件。
App({
towxml: require('./towxml/index'),
按照首页的步骤,我们添加文章详情页面。
"pages/article/index"
在index.wxml文件中,我们添加页面布局,这个很简单,显示渲染后的内容即可。
<!--pages/article/index.wxml-->
<view class="page">
<!--使用towxml-->
<towxml nodes="{{article}}" />
</view>
注意,我们还需要在index.json中添加组件引入。
{
"usingComponents": {
"towxml": "../../towxml/towxml"
}
}
在js文件中,我们需要调用Markdown数据。
onLoad(options) {
const _ts = this;
wx.showLoading({
title: '加载中',
})
httpGet('/artd', {
uuid: options.guid,
}).then((res) => {
const result = res.data;
if (result.code == 1) {
let content = result.data;
let obj = app.towxml(content, 'markdown', {
theme: 'light',
events: {
tap: (e) => {
console.log('tap', e);
}
}
});
_ts.setData({
article: obj,
});
wx.hideLoading({
success: (res) => { },
})
} else {
wx.hideLoading()
}
}).catch((err) => {
console.log(err);
wx.hideLoading()
wx.showToast({
title: '网络异常请重试',
})
})
},
我们在onLoad中加载函数,这样页面启动就会自动网络请求,然后渲染Markdown数据。在请求数据时,我们注意到guid,这个参数是上一个页面即首页,点击文章列表项带过来的数据。它就是上节中,在view中设置data-属性,可以将页面参数传给JS。
首页跳转到详情页方法如下:
jump: function (e) {
const guid = e.currentTarget.dataset.guid
// 调整到文章页面
wx.navigateTo({
url: '../article/index?guid=' + guid,
})
},
现在,关于文章展示和搜索的功能就完成了。文章上传和维护,我们是通过命令行工具来完成的。没有集成到小程序中,一是因为个人小程序不容易过审,二是在小程序中编制Markdown文档非常麻烦,因为没有提供API选择MARKDOWN文档,因此上传Markdown文档也不能实现。我自己实现了命令行工具可以管理文章。也提供开放接口API供用户自己实现工具上传。为了保护开放接口,我们需要用户认证。在小程序中实现了获取用户识别码的功能。可以获取到用户识别码,调用开放接口。下一节,我们讲解用户识别码。