微信小程序将html转化为wxml(循环列表)

wxParse-微信小程序富文本解析组件: https://github.com/icindy/wxParse

git上有详细的基本使用方法

在开文目录下引入下载好的文件wxParse

 

第一种方法   

这是一个蠢方法

js中引入wxParse.js文件

const WxParse = require('../wxParse/wxParse.js');


//这是某一段需要循环的数据

      var result = res.data.list;  //请求到的数据  数组形式
      var len = result.length;

      for (let i = 0; i < len; i++) {
  
        WxParse.wxParse('article' + i, 'html', result[i].des, that, 5); //转化html  单文件

        if (i === len - 1) {
          WxParse.wxParseTemArray("replyTemArray", 'article', len, that)
        }
      }

 

wxml中引入wxParse.wxml

 下面使用的一个蠢办法  主要代码如下

<!-- 实际上你要循环的数据是circlelist wxpase有自己的规范 但是为了把列表里的文本全部渲染进列表  这里使用了一个蠢办法 -->
    <!-- replyTemArray的长度实际上跟circlelist的长度是一样的-->
    <!-- 需要转换的文字依旧使用 <template is="wxParse" data="{{wxParseData:item}}" />就行 -->
    <!-- 其他的信息你可以根据   circlelist所在的索引引入  例如 {{circlelist[index].time}} 这样 --> 

<import src="../wxParse/wxParse.wxml" />   


 <block wx:key="{{index}}" wx:for="{{replyTemArray}}">
      <view class='circlelist'>
        <!-- 头部区域 -->
        <view class='top'>
          <view class='left'>
            <image src='{{logo}}'></image>
          </view>

          <view class='right'>
            <view class='left'>
              <p class='username'>{{tittle}}</p>
              <p>{{circlelist[index].time}}前</p>
            </view>

            <view class='sharbtn' catchtap='godetail' data-goodsid='{{circlelist[index].goodsId}}' data-platform='{{circlelist[index].platform}}'>
              <view class='center'>
                <image src='../../img/buycar.png'></image>
                <text>购买</text>
              </view>
            </view>


          </view>
        </view>

        <view class='concent'>
          <!-- 描述 -->
          <view class='des'>
            <!-- <template is="wxParse" data="{{wxParseData:article1.nodes}}" /> -->
            <template is="wxParse" data="{{wxParseData:item}}" />
          </view>

          <!-- 图片 -->
          <view class='img_wrap' catchtap='godetail' data-goodsid='{{circlelist[index].goodsId}}' data-platform='{{circlelist[index].platform}}'>
            <view class='img' wx:for="{{circlelist[index].array}}" wx:key="{{index}}">
              <image src='{{item}}'></image>
            </view>
          </view>
        </view>
      </view>
    </block>

 

 

第二种方法   

js在第一种方法的基础上添加了一步把后台返回的数据动态的添加到replyTemArray里

const WxParse = require('../wxParse/wxParse.js');


   //这是某一段需要循环的数据

      var result = res.data.list;  //请求到的数据  数组形式
      var len = result.length;

      for (let i = 0; i < len; i++) {
  
        WxParse.wxParse('article' + i, 'html', result[i].des, that, 5); //转化html  单文件

        if (i === len - 1) {
          WxParse.wxParseTemArray("replyTemArray", 'article', len, that)
        }
      }



 console.log(that.data.replyTemArray);  //存放的是转换后的wxml文本
      console.log(result);     //后台返回的真实信息
      var reallist = that.data.replyTemArray;
      //通过循环的方法往replyTemArray里面添加添加属性
      reallist.map((item, index, arr) => {
        arr[index][0].reallist = result[index]; //对应的时使用WxParse后的结构
      });

      that.setData({
        replyTemArray: reallist
      })

      console.log(that.data.replyTemArray);

wxml中的更改较大  真实的数据现在已经全部在replyTemArray中  只需要在replyTemArray中匹配就行


 <block wx:key="{{index}}" wx:for="{{replyTemArray}}">
      <view class='circlelist'>
        <!-- 头部区域 -->
        <view class='top'>
          <view class='left'>
            <image src='{{logo}}'></image>
          </view>

          <view class='right'>
            <view class='left'>
              <p class='username'>{{tittle}}</p>
              <p>{{item[0].reallist.time}}前</p>
            </view>

            <block wx:if="{{navindex==0}}">
              <view class='sharbtn' catchtap='godetail' data-goodsid='{{item[0].reallist.goodsId}}' data-platform='{{item[0].reallist.platform}}'>
                <view class='center'>
                  <image src='../../img/buycar.png'></image>
                  <text>购买</text>
                </view>
              </view>
            </block>

            <block wx:if="{{navindex==1}}">
              <view class='sharbtn1' catchtap="canvasFn" data-goodsinfo='{{item[0].reallist}}'>
                <view class='center'>
                  <image src='../../img/saveimg1.png'></image>
                  <text>保存图片</text>
                </view>
              </view>
            </block>

          </view>
        </view>

        <view class='concent'>
          <!-- 描述 -->
          <view class='des'>
            <!-- <template is="wxParse" data="{{wxParseData:article1.nodes}}" /> -->

            <template is="wxParse" data="{{wxParseData:item}}" />

          </view>

          <!-- 图片 -->
          <view class='img_wrap' catchtap='godetail' data-goodsid='{{item[0].reallist.goodsId}}' data-platform='{{item[0].reallist.platform}}'>
            <view class='img' wx:for="{{item[0].reallist.array}}" wx:key="{{index}}">
              <image src='{{item}}'></image>
            </view>
          </view>
        </view>
      </view>
    </block>

打印的replyTemArray 数据如下  replyTemArray里下标为0的里面已经增加了一个reallist属性

 

总结一下吧

第一种办法虽然蠢但是比较好理解只要细心就不太容易犯错,第二种办法比较简洁主要思想就是合并数据给原始数据增添属性,理解起来较第一种稍微难点。两种办法都行看个人爱好

 

有些错的地方欢迎补充

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
插件地址:https://github.com/kevenfeng/html-to-wxml如果前端技术比较牛,可以直接看github上面的demo。可以更好的理解用法。使用方法:1.引用插件var R_htmlToWxml = require(‘../../util/htmlToWxml.js’);//引入公共方法2.将html内容转成json数据R_htmlToWxml.html2json(“html内容”);转换后的json格式类型大概如下:3.吐到页面中显示<block wx:for="{{content}}"  wx:for-index="idy"  wx:for-item="cellData">         <block  wx:if="{{cellData.type == 'view'}}">             <view class="p">                 <block  wx:for="{{cellData.child}}" wx:key="text">                     <block  wx:if="{{item.type == 'a'}}">                         <text class="a" data-seccode="{{item.attr['data-seccode']}}" data-secname="{{item.attr['data-secname']}}" bindtap="stockClick">{{item.text}}</text>                     </block>                     <block  wx:else>                         <text>{{item.text}}</text>                     </block>                 </block>             </view>         </block>         <block wx:if="{{cellData.type == 'img'}}">             <image class="img" data-index="{{idy}}" style="height: {{cellData.attr.height?cellData.attr.height:0}}px"  mode="aspectFit" src="{{cellData.attr.src}}" bindload="imageLoad"></image>         </block>     </block>demo效果:由于小程序图片的高度没法自适应,需要给图片设置高度,所以需要在图片加载完以后,获取图片高度,等比算出显示图片高度,赋值给对应图片通常我们抓取的内容是html页面,特别是像资讯这一类的,如果在小程序里面显示文章内容,此插件提供了一种解决方案,希望对大家有用。在客户端中用native显示html页面体验上面没有native的好,htmlToWxml插件给客户端中用native的方式显示html内容提供了一种解决方案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值