uni-app文章详情-富文本展示 优雅展示代码块
<p> </p><p>在uni-app开发中,开发一个资讯详情页面,详情里包含图片和代码块。这时候用简单的rich-text控件已经不够用了。用官方demo里的html-parser.js也无法很好的展示代码区域。这个时候就要使用官方提供的插件来解决。</p>
<p>官方的这个插件有很多问题。需要使用第3方修复的版本:https://ext.dcloud.net.cn/plugin?id=1279</p>
<p>首先:下载插件 :https://ext.dcloud.net.cn/plugin?id=1279</p>
<p>第二步:写代码 demo示例</p>
<p><span style="color: rgba(255, 0, 0, 1)"><strong> </strong></span></p>
<p> </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">template</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
<u-parse :content="content" @navigate="navigate"></u-parse></span><span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">template</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">import uParse from "@/components/feng-parse/parse.vue"; </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">//</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">注意:官方提供的示例代码有问题</span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">
export </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">default</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> {
components: {
uParse
},
data () {
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">return</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> {
article: </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"><div>我是HTML代码</div></span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">
}
},
methods: {
preview(src, e) {
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">//</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)"> do something</span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> },
navigate(href, e) {
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">//</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)"> do something</span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> }
}
}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(128, 0, 0, 1)">
@import url("../../components/feng-parse/parse.css"); //注意:官方提供的示例代码有问题
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>我这边具体的业务代码如下:(可以忽略) </p>
<div class="cnblogs_code">
<pre><template>
<view>
<view class="banner"><span style="color: rgba(0, 0, 0, 1)">
{{article_detail.title}}
</span></view>
<view class="article-meta">
<text class="article-meta-text article-author">作者:{{article_detail.fields.author}}</text>
</view>
<view class="article-content">
<div>
<u-parse :content="article_detail.content" @preview="preview" @navigate="navigate" />
</div>
<view class="parse-con">
<u-parse :content="article_detail.content" @navigate="navigate"></u-parse>
</view>
<view v-<span style="color: rgba(0, 0, 255, 1)">if</span>="article_detail.fields.source" class="article-source"><span style="color: rgba(0, 0, 0, 1)">
文章来自:{{article_detail.fields.source}}
</span></view>
</view>
<view class="comment-wrap"></view>
</view>
</template>
<script><span style="color: rgba(0, 0, 0, 1)">
import uParse from </span>"@/components/feng-parse/parse.vue"<span style="color: rgba(0, 0, 0, 1)">
const FAIL_CONTENT </span>= '<p>数据加载中</p>'<span style="color: rgba(0, 0, 0, 1)">;
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
components: {
uParse
},
data() {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
article_detail: {},
id: </span>0<span style="color: rgba(0, 0, 0, 1)">
}
},
onShareAppMessage() {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
title: </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.article_detail.title,
path: </span>'/pages/detail/detail?query=' + <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.id
}
},
onLoad: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(event) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 目前在某些平台参数会被主动 decode,暂时这样处理。</span>
<span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>'入参:' +<span style="color: rgba(0, 0, 0, 1)"> event.query);
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.id =<span style="color: rgba(0, 0, 0, 1)"> event.query;
} </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (error) {
console.log(</span>'异常来了'<span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.getDetail();
},
onShow: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
console.log(</span>'onShow里:'<span style="color: rgba(0, 0, 0, 1)">);
console.log(</span>'id=' + <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.id);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> #ifdefMP-BAIDU </span>
<span style="color: rgba(0, 0, 255, 1)">var</span> zyizurl = getApp().globalData.zyiz_domain + '/api/Zyiz/Detail/' + <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.id;
uni.request({
url: zyizurl,
success: (result) </span>=><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (result.statusCode == 200<span style="color: rgba(0, 0, 0, 1)">) {
console.log(</span>"详情结果2:"<span style="color: rgba(0, 0, 0, 1)">);
console.log(result);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> article_d =<span style="color: rgba(0, 0, 0, 1)"> result.data.data;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> keyw = article_d.tags + ',' + article_d.category_name + ',' +<span style="color: rgba(0, 0, 0, 1)"> getApp().globalData.keywords;
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (article_d.seo_keywords) {
keyw </span>= article_d.tags + ',' + article_d.category_name + ',' +<span style="color: rgba(0, 0, 0, 1)"> article_d.seo_keywords;
}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> zhaiyao =<span style="color: rgba(0, 0, 0, 1)"> getApp().globalData.description;
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (article_d.zhaiyao) {
zhaiyao </span>=<span style="color: rgba(0, 0, 0, 1)"> article_d.zhaiyao;
}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> img_url = 'http://www.zyiz.net/templates/main_zyiz/images/logo.png'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (article_d.img_url) {
img_url </span>=<span style="color: rgba(0, 0, 0, 1)"> article_d.img_url;
}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> title = article_d.title + '-' +<span style="color: rgba(0, 0, 0, 1)"> article_d.category_name;
swan.setPageInfo({
title: title,
keywords: keyw,
description: zhaiyao,
articleTitle: title,
releaseDate: article_d.add_time,
image: img_url,
video: </span>''<span style="color: rgba(0, 0, 0, 1)">
});
}
}
});
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> #endif</span>
<span style="color: rgba(0, 0, 0, 1)">
},
methods: {
getDetail() {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> zyizurl = getApp().globalData.zyiz_domain + '/api/Zyiz/Detail/' + <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.id;
uni.request({
url: zyizurl,
success: (result) </span>=><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (result.statusCode == 200<span style="color: rgba(0, 0, 0, 1)">) {
console.log(</span>"详情结果:"<span style="color: rgba(0, 0, 0, 1)">);
console.log(result);
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.article_detail =<span style="color: rgba(0, 0, 0, 1)"> result.data.data;
}
}
});
},
navigate(e) {
console.log(e)
}
}
}
</span></script>
<style><span style="color: rgba(0, 0, 0, 1)">
@import url(</span>"../../components/feng-parse/parse.css"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> #ifndef APP-PLUS </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
page {
min</span>-height: 100%<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> #endif </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
.baidu</span>-<span style="color: rgba(0, 0, 0, 1)">arcontent {
width: </span>98%<span style="color: rgba(0, 0, 0, 1)">;
}
.baidu</span>-<span style="color: rgba(0, 0, 0, 1)">arcontent img,
.baidu</span>-<span style="color: rgba(0, 0, 0, 1)">arcontent image {
max</span>-width: 95% !<span style="color: rgba(0, 0, 0, 1)">important;
mode: aspectFit;
}
.article</span>-<span style="color: rgba(0, 0, 0, 1)">source {
padding: 10upx;
color: #AAAAAA;
}
.banner {
margin: 10upx;
text</span>-<span style="color: rgba(0, 0, 0, 1)">align: center;
font</span>-<span style="color: rgba(0, 0, 0, 1)">size: 40upx;
font</span>-<span style="color: rgba(0, 0, 0, 1)">weight: bold;
}
.article</span>-<span style="color: rgba(0, 0, 0, 1)">content image {
width: </span>96%<span style="color: rgba(0, 0, 0, 1)">;
}
.banner</span>-<span style="color: rgba(0, 0, 0, 1)">img {
flex: </span>1<span style="color: rgba(0, 0, 0, 1)">;
}
.title</span>-<span style="color: rgba(0, 0, 0, 1)">area {
position: absolute;
left: 30upx;
right: 30upx;
bottom: 30upx;
z</span>-index: 11<span style="color: rgba(0, 0, 0, 1)">;
}
.title</span>-<span style="color: rgba(0, 0, 0, 1)">text {
font</span>-<span style="color: rgba(0, 0, 0, 1)">size: 32upx;
font</span>-weight: 400<span style="color: rgba(0, 0, 0, 1)">;
line</span>-<span style="color: rgba(0, 0, 0, 1)">height: 42upx;
lines: </span>2<span style="color: rgba(0, 0, 0, 1)">;
color: #ffffff;
overflow: hidden;
}
.article</span>-<span style="color: rgba(0, 0, 0, 1)">meta {
padding: 20upx 30upx;
flex</span>-<span style="color: rgba(0, 0, 0, 1)">direction: row;
align</span>-<span style="color: rgba(0, 0, 0, 1)">items: center;
justify</span>-content: flex-<span style="color: rgba(0, 0, 0, 1)">start;
}
.article</span>-meta-<span style="color: rgba(0, 0, 0, 1)">text {
color: gray;
}
.article</span>-<span style="color: rgba(0, 0, 0, 1)">text {
font</span>-<span style="color: rgba(0, 0, 0, 1)">size: 26upx;
line</span>-<span style="color: rgba(0, 0, 0, 1)">height: 50upx;
margin: </span>0<span style="color: rgba(0, 0, 0, 1)"> 20upx;
}
.article</span>-<span style="color: rgba(0, 0, 0, 1)">author {
font</span>-<span style="color: rgba(0, 0, 0, 1)">size: 30upx;
}
.article</span>-<span style="color: rgba(0, 0, 0, 1)">time {
font</span>-<span style="color: rgba(0, 0, 0, 1)">size: 30upx;
}
.article</span>-<span style="color: rgba(0, 0, 0, 1)">content {
font</span>-<span style="color: rgba(0, 0, 0, 1)">size: 30upx;
padding: </span>0<span style="color: rgba(0, 0, 0, 1)"> 30upx;
margin</span>-<span style="color: rgba(0, 0, 0, 1)">bottom: 30upx;
overflow: hidden;
}
</span></style></pre>
</div>
<p> </p>
<div>
<div id="highlighter_994254" class="syntaxhighlighterhtml"> </div>
</div>
<p>第三步:查看效果:</p>
<p>1、微信小程序的效</p>
<p><img src="https://img2018.cnblogs.com/common/98796/202002/98796-20200207002230742-1583844149.png" alt=""></p>
<p>2、百度小程序的效果:</p>
<p><img src="https://img2018.cnblogs.com/common/98796/202002/98796-20200207002242578-209060398.png" alt=""></p>
<p> </p>
<p>非常完美的解决了问题。</p>
<p>文章根据:http://www.zyiz.net/tech/detail-104163.html 改编。</p>
</div>
<div id="MySignature" role="contentinfo">
<div style="display: block" id="MySignature"><div id="AllanboltSignature">
<p style="border-top: #e0e0e0 1px dashed; border-right: #e0e0e0 1px dashed; border-bottom: #e0e0e0 1px dashed; border-left: #e0e0e0 1px dashed; padding-top: 10px; padding-right: 5px; padding-bottom: 10px; padding-left: 200px; font-family: 微软雅黑; color: #fff; font-size: 15px; background: url("https://img2020.cnblogs.com/blog/98796/202005/98796-20200507125205257-1603434788.jpg") black no-repeat 1% 50%;background-size: 17%" id="PSignature" width="212">
作者:沐雪
<br>
文章均系作者原创或翻译,如有错误不妥之处,欢迎各位批评指正。本文版权归作者和博客园共有,如需转载恳请注明。
<br>如果您觉得阅读这篇博客让你有所收获,请点击右下方【推荐】
<br>
为之网-热爱软件编程 http://www.weizhi.cc/
</p>
</div></div><br><br>
来源:https://www.cnblogs.com/puzi0315/p/12271673.html
頁:
[1]