在uni-app开发中,开发一个资讯详情页面,详情里包含图片和代码块。这时候用简单的rich-text控件已经不够用了。用官方demo里的html-parser.js也无法很好的展示代码区域。这个时候就要使用官方提供的插件来解决。
首先:下载插件:https://ext.dcloud.net.cn/plugin?id=183
第二步:写代码 demo示例
注意:官方提供的示例代码有点小问题,请用我下面的代码。
<template> <div> <u-parse :content="article" @preview="preview" @navigate="navigate" /> </div> </template> <script> import uParse from ‘../../components/u-parse/u-parse.vue‘; //注意:官方提供的示例代码有问题 export default { components: { uParse }, data () { return { article: ‘<div>我是HTML代码</div>‘ } }, methods: { preview(src, e) { // do something }, navigate(href, e) { // do something } } } </script> <style> @import url("../../components/u-parse/u-parse.css"); //注意:官方提供的示例代码有问题 </style>
我这边具体的业务代码如下:(可以忽略)
<template> <view> <view class="banner"> {{banner.title}} </view> <view class="article-meta"> <text class="article-meta-text article-author">{{banner.source}}</text> <text class="article-meta-text article-text">发表于</text> <text class="article-meta-text article-time">{{banner.datetime}}</text> </view> <view class="article-content"> <div> <u-parse :content="article" @preview="preview" @navigate="navigate" /> </div> </view> <view class="comment-wrap"></view> </view> </template> <script> import uParse from ‘../../components/u-parse/u-parse.vue‘; const FAIL_CONTENT = ‘<p>获取信息失败1</p>‘; export default { components: { uParse }, data() { return { banner: {}, article: ‘‘ } }, onShareAppMessage() { return { title: this.banner.title, path: ‘/pages/detail/detail?query=‘ JSON.stringify(this.banner) } }, onLoad(event) { // 目前在某些平台参数会被主动 decode,暂时这样处理。 try { this.banner = JSON.parse(decodeURIComponent(event.query)); console.log("详情页面"); } catch (error) { console.log("异常来!"); this.banner = JSON.parse(event.query); } uni.setNavigationBarTitle({ title: ‘找一找教程网zyiz.net‘ }); this.getDetail(); }, methods: { getDetail() { var zyizurl = getApp().globalData.zyiz_domain ‘/api/article/article.ashx?actName=detail&id=‘; uni.request({ url: zyizurl this.banner.newsid, success: (result) => { console.log("详情结果:"); console.log(result); let content = FAIL_CONTENT if (result.statusCode == 200) { content = result.data.data.content } this.article = content; } }); }, preview(src, e) { // do something }, navigate(href, e) { // do something } } } </script> <style> @import url("../../components/u-parse/u-parse.css"); /* #ifndef APP-PLUS */ page { min-height: 100%; } /* #endif */ .banner { margin: 10upx; text-align: center; } .article-content image { width: 96%; } .banner-img { flex: 1; } .title-area { position: absolute; left: 30upx; right: 30upx; bottom: 30upx; z-index: 11; } .title-text { font-size: 32upx; font-weight: 400; line-height: 42upx; lines: 2; color: #ffffff; overflow: hidden; } .article-meta { padding: 20upx 30upx; flex-direction: row; align-items: center; justify-content: flex-start; } .article-meta-text { color: gray; } .article-text { font-size: 26upx; line-height: 50upx; margin: 0 20upx; } .article-author { font-size: 30upx; } .article-time { font-size: 30upx; } .article-content { font-size: 30upx; padding: 0 30upx; margin-bottom: 30upx; overflow: hidden; } </style>
第三步:查看效果:
1、微信小程序的效
2、百度小程序的效果:
非常完美的解决了问题。