Coder Social home page Coder Social logo

f-loat / mpvue-wxparse Goto Github PK

View Code? Open in Web Editor NEW

This project forked from icindy/wxparse

376.0 8.0 70.0 4.92 MB

📰适用于 Mpvue 的微信小程序富文本解析自定义组件

License: MIT License

JavaScript 34.09% Vue 59.64% CSS 6.27%
mpvue wxparse wxapp mpvue-wxparse

mpvue-wxparse's Introduction

mpvue-wxParse 适用于 Mpvue 的微信小程序富文本解析组件

支持 Html、Markdown 转 Wxml 可视化,修改自: wxParse

npm package npm downloads

扫码体验

小程序码

属性

名称 类型 默认值 描述
loading Boolean false 数据加载状态
className String 自定义 class 名称
content String 渲染内容
noData String 数据不能为空 空数据时的渲染展示
startHandler Function 见源码 自定义 parser 函数
endHandler Function null 自定义 parser 函数
charsHandler Function null 自定义 parser 函数
imageProp Object 见下文 图片相关参数

自定义 parser 函数具体介绍

  • 传入的参数为当前节点 node 对象及解析结果 results 对象,例如 startHandler(node, results)
  • 无需返回值,通过对传入的参数直接操作来完成需要的改动
  • 自定义函数会在原解析函数处理之后执行

imageProp 对象具体属性

名称 类型 默认值 描述
mode String 'aspectFit' 图片裁剪、缩放的模式
padding Number 0 图片内边距
lazyLoad Boolean false 图片懒加载
domain String '' 图片服务域名

事件

名称 参数 描述
preview 图片地址,原始事件 预览图片时触发
navigate 链接地址,原始事件 点击链接时触发

基本使用方法

  • 安装
npm i mpvue-wxparse
  • 使用
<template>
  <div>
    <wxParse :content="article" @preview="preview" @navigate="navigate" />
  </div>
</template>

<script>
import wxParse from 'mpvue-wxparse'

export default {
  components: {
    wxParse
  },
  data () {
    return {
      article: '<div>我是HTML代码</div>'
    }
  },
  methods: {
    preview(src, e) {
      // do something
    },
    navigate(href, e) {
      // do something
    }
  }
}
</script>

<style>
@import url("~mpvue-wxparse/src/wxParse.css");
</style>

渲染 Markdown

先将 markdown 转换为 html 即可

npm install marked
import marked from 'marked'
import wxParse from 'mpvue-wxparse'

export default {
  components: {
    wxParse
  },
  data () {
    return {
      article: marked(`#hello, markdown!`)
    }
  }
}

Tips

  • v0.6 之后的版本样式文件需自行引入

  • 对性能要求较高的话,推荐使用这个原生组件版 wxParser-plugin

  • 打包时出错 ERROR in static/js/vendor.js from UglifyJs

参照以下配置使 babel 处理 mpvue-wxparse,或更新 UglifyJs 插件

// webpack.base.conf.js
{
  test: /\.js$/,
  include: [resolve('src'), /mpvue-wxparse/],
  use: [
    'babel-loader',
    {
      loader: 'mpvue-loader',
      options: {
        checkMPEntry: true
      }
    }
  ]
}

感谢

@stonewen| @Daissmentii | @wuyanwen | @vcxiaohan

mpvue-wxparse's People

Contributors

2753837446 avatar bogunyou avatar daissmentii avatar dicn avatar f-loat avatar felixonmars avatar hustlion avatar icindy avatar issatan avatar jeff2ma avatar jiannibang avatar liuchungui avatar lpreterite avatar renford avatar shenqihui avatar slime7 avatar stonewen avatar vilien avatar webber007 avatar wuyanwen avatar xuqiang521 avatar yaoshanliang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mpvue-wxparse's Issues

img解析后会带有宽高的行内样式

<img src="https://livestatic.polyv.net/assets/images/em/3.png">
经过解析后会变成
<image class="_image data-v-28e41f6d img inline" data-comkey="0,5,0,0-1,0-1,4" data-eventid="0" data-src="https://livestatic.polyv.net/assets/images/em/3.png" mode="aspectFit" src="https://livestatic.polyv.net/assets/images/em/3.png" style="height: 48px;; width: 48px; padding: 0 0px;" comkey="0,5,0,0-1,0-1,4"></image>
其中style="height: 48px;; width: 48px; padding: 0 0px;"是多余的,请问要怎样能去掉这个默认的行内样式?

监听问题

页面A和页面B都使用了组件,A监听了preview,B没有,但是在B页面点击图片时会触发A页面自定义的事件,这是为什么呀

遇到一个奇怪的问题

有一个文章详情页用到了富文本组间,初次进入后页面是正常渲染的,然后退出通过不同的id进入后,显示的还是上次的富文本内容,无法更新为当前的,页面的其他数据都可以更新

table td的rowpan属性是不是不能解析啊?

用mpvue-wxparse插件的时候,发现td标签内部含有rowspan属性的表格显示是异常的,在开发者工具里查看td元素也没看到相应的解析显示,这是什么问题啊?需要额外配置什么或者修改什么吗

还是关于li的问题

圆点还是方的,建议给类li-circle加上样式
vertical-align:4px;border-radius:100%;

显示错误 missing ) after argument lis

2018-08-04 22 39 11

代码只有一行,删除后用 {{ article }} 正常
<wxParse :content="article" />

是 mpvue-loader 的问题吗?如果是的话要用哪个版本的 mpvue-loader?

优化加载速度

当富文本过长的时候加载的特么慢,怎么能优化一下这个呢,大佬

更新 mpvue-loader 后有问题

"mpvue-loader": "1.0.14",

大概知道问题在哪里,是否有时间可以修复一下,方便NPM,谢谢。

VM42394:2 ./components/wxParseTemplate2$fc36b492.wxml
(anonymous) @ VM42394:2
VM42394:3  Template "wxParseImg$135c0642" not found.
  23 |     </block>
  24 |     <block wx:elif="{{node.tag == 'img'}}">
> 25 |       <template data="{{...$root[$kk+'4'], $root}}" is="wxParseImg$135c0642"></template>
     |                                                        ^
  26 |     </block>
  27 |     <block wx:elif="{{node.tag == 'a'}}">
  28 |       <view bindtap="handleProxy" data-href="{{node.attr.href}}" data-eventid="{{'0'}}" data-comkey="{{$k}}" class="_view data-v-38c3cb9a _view data-v-38c3cb9a _view data-v-38c3cb9a" style=" {{node.styleStr}}">

为什么深层的p标签里的内容会消失啊

页面结构大概是(专区微信公众号的内容)

<section class="Powered-by-XIUMI V5" style="box-sizing: border-box;" powered-by="xiumi.us"><section class="" style="margin-right: 0%;margin-left: 0%;box-sizing: border-box;">
<section class="" style="text-align: left;box-sizing: border-box;">
<p style="box-sizing: border-box;">身处他乡,勤勉又开挂的学术生涯</p>
</section>
</section>
</section>

用组件转换之后生成的wxml
wxml

就会发现深层的p标签里面的内容莫名其妙的消失了~
@F-loat ☺️

文本型标签没有显示

转义标签没显示比如lt; gt; 在显示时候会丢失,实际应该显示成<标签>a</标签>形式的文本

wepy中使用报错

...
代码长这样
image

报错长这样
image

引入什么的都没问题,貌似是wepy不支持标准的vue语法?

关于a标签的bug

若富文本中存在无任何属性的a标签 <a>something</a>,那么node.attr.href会报错,我现在是加了个判断。node.attr ? node.attr.href : ''

自定义解析函数

大佬 自定义函数在原解析函数之后执行
if (customHandler.start) {
customHandler.start(node);
}
如果node里面的图片地址需要预处理一遍这种情况 results.imageUrls无法添加处理之后的图片地址

pre 标签

您好,请问如何渲染pre标签,或者有没有什么替代方案,来自wordpress 的提问,

第二个issuse,关于开发中遇到的问题

  1. 当富文本较多时,控制台会console出一个超大json对象,影响调试,这个能去掉最好了

  2. 建议去掉markdown以及表情部分,因为在小程序中用不到这些,减小体积

打开多个富文本之后预览图片问题

大佬有没有遇到这个问题,打开多个富文本之后,当前富文本页面预览图片会出现之前打开的富文本中的图片。例如: 打开了两个富文本,在第三富文本中预览图片会触发三次preview事件,我尝试清除发现都不对,给个思路好么

编辑器能实现吗?

Hello:
刚体验你的小程序,确实能在wxparse的基础上实现漂亮的渲染,但是仅仅是渲染,能否实现一个富文本编辑器呢?
提供一些简单的控制按钮,什么加粗,斜体,标题级别,中划线,下划线等等之类的控制工具,在用点击后直接基于wxparse渲染出来了。这个应该是wxparse的更高级的应用!

img的src路径中带有'code'会被错误的解析

引用img标签时,发现图片无法显示,经审查元素检查,可以看到,因为图片路径中带有'code'字符串,被错误的解析了。审查元素的结果如图,代码如下。
qq 20180324130118

<template>
  <div>
    <wxParse :content="article" />
  </div>
</template>
<script>
import wxParse from 'mpvue-wxparse'

export default {
  components: {
    wxParse
  },
  data () {
    return {
      article: "<img src='http://p.funcodeit.com/test/ban1.png'>"
    }
  }
}
</script>

渲染后id消失

传入的代码片段是带id的,自定义parser中的node也能看见id在attr属性下,但渲染出来却是没有id的,这个该咋解决?

希望加入这些功能

  1. 标签内data开头的字段,希望字段后的内容能得到完全还原,到小程序内通过event.tagrget.dataset可以拿到。

  2. a标签内的href属性,希望可以转成data-href,这样可以通过自定义函数做到仿点击超链接。

  3. image标签,希望自定义mode属性

- - 我又来提需求了

请问能否给a标签下的所有子元素都加上data-href标签,因为在小程序中无法拿到祖先元素的节点属性。
像这样点击子元素或者子孙元素拿不到祖先元素的data-href属性
<view data-href='something'> <view>我是子元素</view> <view> <view>我是子孙元素</view> </view> </view>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.