郭大路 發表於 2020-2-7 00:25:00

uni-app文章详情-富文本展示 优雅展示代码块

<p>&nbsp;</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>&nbsp;</strong></span></p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">template</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;&lt;u-parse :content="content" @navigate="navigate"&gt;&lt;/u-parse&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">template</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;
</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">import uParse from "@/components/feng-parse/parse.vue";&nbsp;&nbsp;</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)">&nbsp;
export&nbsp;</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)">&nbsp;{
&nbsp;&nbsp;components:&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;uParse
&nbsp;&nbsp;},
&nbsp;&nbsp;data&nbsp;()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;</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)">&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;article:&nbsp;</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)">&lt;div&gt;我是HTML代码&lt;/div&gt;</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)">
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;},
&nbsp;&nbsp;methods:&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;preview(src,&nbsp;e)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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)">&nbsp;do&nbsp;something</span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;navigate(href,&nbsp;e)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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)">&nbsp;do&nbsp;something</span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}
}
</span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;
</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(128, 0, 0, 1)">
@import&nbsp;url("../../components/feng-parse/parse.css");&nbsp;&nbsp;//注意:官方提供的示例代码有问题
</span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<p>我这边具体的业务代码如下:(可以忽略)&nbsp;&nbsp;</p>
<div class="cnblogs_code">
<pre>&lt;template&gt;
    &lt;view&gt;
      &lt;view class="banner"&gt;<span style="color: rgba(0, 0, 0, 1)">
            {{article_detail.title}}
      </span>&lt;/view&gt;

      &lt;view class="article-meta"&gt;
            &lt;text class="article-meta-text article-author"&gt;作者:{{article_detail.fields.author}}&lt;/text&gt;
      &lt;/view&gt;
      &lt;view class="article-content"&gt;

            &lt;div&gt;
                &lt;u-parse :content="article_detail.content" @preview="preview" @navigate="navigate" /&gt;
            &lt;/div&gt;
            &lt;view class="parse-con"&gt;
                &lt;u-parse :content="article_detail.content" @navigate="navigate"&gt;&lt;/u-parse&gt;
            &lt;/view&gt;

            &lt;view v-<span style="color: rgba(0, 0, 255, 1)">if</span>="article_detail.fields.source" class="article-source"&gt;<span style="color: rgba(0, 0, 0, 1)">
                文章来自:{{article_detail.fields.source}}
            </span>&lt;/view&gt;
      &lt;/view&gt;
      &lt;view class="comment-wrap"&gt;&lt;/view&gt;
    &lt;/view&gt;
&lt;/template&gt;


&lt;script&gt;<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>= '&lt;p&gt;数据加载中&lt;/p&gt;'<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>=&gt;<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>=&gt;<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>&lt;/script&gt;

&lt;style&gt;<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>&lt;/style&gt;</pre>
</div>
<p>&nbsp;</p>
<div>
<div id="highlighter_994254" class="syntaxhighlighterhtml">&nbsp;</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>&nbsp;</p>
<p>非常完美的解决了问题。</p>
<p>文章根据:http://www.zyiz.net/tech/detail-104163.html&nbsp;改编。</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(&quot;https://img2020.cnblogs.com/blog/98796/202005/98796-20200507125205257-1603434788.jpg&quot;) 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]
查看完整版本: uni-app文章详情-富文本展示 优雅展示代码块