位置: IT常识 - 正文

【更新】vue使用 wangeditor4 富文本 + 富文本回显带标签+wangEditor4 加字数,光标会跑到最后 问题 (已解决)(vue使用技巧)

编辑:rootadmin
【更新】vue使用 wangeditor4 富文本 + 富文本回显带标签+wangEditor4 加字数,光标会跑到最后 问题 (已解决)

推荐整理分享【更新】vue使用 wangeditor4 富文本 + 富文本回显带标签+wangEditor4 加字数,光标会跑到最后 问题 (已解决)(vue使用技巧),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue使用key,vue怎么使用,vue 使用,使用vuex,vue的简单使用,vue 使用,vue使用技巧,vue使用教程,内容如对您有帮助,希望把文章链接给更多的朋友!

背景:业务需求,要实现一个富文本框,好方便用户插入图片

问题:百度了一整天,看了n多文章包括官方文档,又花了半天时间实现需求,对于小白来说,真的是大难题,又着急,又害怕,结果就是,越急越搞不定……此处省略我的吐槽

来吧,上步骤:

一、安装富文本 wangEditor(参考官方文档)wangEditornpm install wangeditor --save

我这里装的是版本4 (因为我折腾了半天的版本5 没搞出来)

二、在components文件夹下新建一个Vue文件,名字随便。参考:wangEditor.vue

把下面代码复制粘贴进去(图片上传部分还没完善好)

<template> <div> <div id="websiteEditorElem" style="height:300px;background: #ffffff;"></div> </div></template><script>import E from 'wangeditor'export default { name: "wangEditor", props: { content: "" //获取从父组件中传过来的值,主要用于修改的时候获取值,并加入到富文本框中 }, data() { return { phoneEditor: '', name: '', } }, methods: { }, mounted() { this.phoneEditor = new E('#websiteEditorElem') // 上传图片到服务器,base64形式 this.phoneEditor.config.uploadImgShowBase64 = true // // 隐藏网络图片 this.phoneEditor.config.showLinkImg = false; this.phoneEditor.config.debug = true; //图片上传接口 this.phoneEditor.config.uploadImgServer = '' // 上传图片的接口地址 this.phoneEditor.config.uploadFileName = 'image' // formdata中的name属性,比如现在是将图片image加入到formdate,后台从image中接收到图片数据 this.phoneEditor.config.uploadImgHeaders = { token: sessionStorage.getItem("token") // 设置请求头 } this.phoneEditor.config.uploadImgHooks = { customInsert: function (insertImg, result, editor) { console.log("成功", result); // before: function (xhr, editor, files) { // // 图片上传之前触发 // // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,files 是选择的图片文件 // // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传 // // return { // // prevent: true, // // msg: '放弃上传' // // } // }, // success: function (xhr, editor, result) { // // 图片上传并返回结果,图片插入成功之后触发 // // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,result 是服务器端返回的结果 // }, // fail: function (xhr, editor, result) { // // 图片上传并返回结果,但图片插入错误时触发 // // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,result 是服务器端返回的结果 // }, // error: function (xhr, editor) { // // 图片上传出错时触发 // // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象 // }, // timeout: function (xhr, editor) { // // 图片上传超时时触发 // // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象 // }, // // 如果服务器端返回的不是 {errno:0, data: [...]} 这种格式,可使用该配置 // // (但是,服务器端返回的必须是一个 JSON 格式字符串!!!否则会报错) // customInsert: function (insertImg, result, editor) { // // 图片上传并返回结果,自定义插入图片的事件(而不是编辑器自动插入图片!!!) // // insertImg 是插入图片的函数,editor 是编辑器对象,result 是服务器端返回的结果 // // 举例:假如上传图片成功后,服务器端返回的是 {url:'....'} 这种格式,即可这样插入图片: // var url = result.url // insertImg(url) // // result 必须是一个 JSON 格式字符串!!!否则报错 // } } } // 创建一个富文本编辑器 this.phoneEditor.create() // 修改的时候,需要富文本内容回显,则需要加入以下代码 this.phoneEditor.txt.html(this.content) this.phoneEditor.config.onchange = (html) => { this.info_ = html // 绑定当前逐渐地值 this.$emit('change', this.info_) // 将内容同步到父组件中 } },}</script>

步骤分解:

将内容同步到父组件中: this.phoneEditor.config.onchange = (html) => { this.info_ = html // 绑定当前逐渐地值 this.$emit('change', this.info_) // 将内容同步到父组件中 }父组件中的获取方法是<WangEdit @change="grtUrl" :content="editForm.content"></WangEdit>

@change="getUrl1"获取子组件中的数据,具体方法如下:

grtUrl(path){ this.editForm.content = path; },

将子组件的数据加入到this.editForm.content中

修改内容时

需要富文本框中的数据回显,在子组件中加入

props:{ content:"" //获取从父组件中传过来的值,主要用于修改的时候获取值,并加入到富文本框中 },三、从父组件中调用子组件时

完整代码:

<el-dialog title="修改培训信息" v-model="editWinVisible" width="45%" :before-close="handleClose" :center="false"> <el-row class="dialog-detail"> <el-col :span="5" class="dialog-detail-title">培训编号:</el-col> <el-col :span="19" class="dialog-detail-content">{{editForm.code}}</el-col> <el-col :span="5" class="dialog-detail-title">培训标题:</el-col> <el-col :span="19" class="dialog-detail-content"> <el-input v-model="editForm.title" placeholder="请输入培训标题"></el-input> </el-col> <el-col :span="5" class="dialog-detail-title">培训内容:</el-col> <el-col :span="19" class="dialog-detail-content" > <WangEdit @change="grtUrl" :content="editForm.content"></WangEdit> </el-col> <el-col :span="5" class="dialog-detail-title">创建时间:</el-col> <el-col :span="19" class="dialog-detail-content"> {{editForm.createDate}} </el-col> </el-row> <span slot="footer" class="dialog-footer"> <el-button @click="CloseWin()">关闭</el-button> <el-button type="primary" @click="SaveEditData()">保存</el-button> </span> </el-dialog><script>import WangEdit from '@/components/wangEditor.vue' //WangEditor在项目中的地址import Req from '@/utils/ApiRequest'export default{ components:{ WangEdit }, data(){ return{ editForm:{content:''}, editWinVisible:false, } }, methods:{ grtUrl(path){ this.editForm.content = path; }, SaveEditData(){ console.log('send',this.editForm) //下面这行代码就是控制页面显示是否带<p>标签的 //this.editForm.content=this.editForm.content.replace(/<[^>]+>/g,"") Req.UpdateNews(this.editForm).then((res)=>{ if(res.status==200) { this.$message({type: 'success', message: '保存成功!'}); this.CloseWin(); this.GetTabData(); } else{ this.$message({type: 'error', message: '保存失败!'}); } }) }, }}

 富文本框就好了,数据也绑上了

 注意:接下来,出现了一个bug,我在文本框里编辑后,页面绑定的数据神奇的带上了标签:

【更新】vue使用 wangeditor4 富文本 + 富文本回显带标签+wangEditor4 加字数,光标会跑到最后 问题 (已解决)(vue使用技巧)

 

 好了,接下来又是一顿百度,还好让我找到了

使用富文本quill-editor发送后台数据有标签问题<p>

在点击确认提交的时候将富文本数据双向绑定的时候,添加  .replace(/<[^>]+>/g,"")

我是保存时,那么我的代码要做如下更改,加一行this.editForm.content=this.editForm.content.replace(/<[^>]+>/g,"")

​ SaveEditData(){ this.editForm.content=this.editForm.content.replace(/<[^>]+>/g,"") Req.UpdateNews(this.editForm).then((res)=>{ if(res.status==200) { this.$message({type: 'success', message: '保存成功!'}); this.CloseWin(); this.GetTabData(); } else{ this.$message({type: 'error', message: '保存失败!'}); } }) },​

然后在标签中就可以直接展示了:

<el-table-column prop="contentShow" label="培训内容" show-overflow-tooltip> </el-table-column>

这里补充一下,还可以直接使用 v-html 具体方法,但是使用这个方法时,需要在如下场景使用里使用,直接在标签上绑定是不可以的,如:

<el-col :span="6" class="dialog-detail-title">新闻标题:</el-col> <el-col :span="18" class="dialog-detail-content">{{ detailForm.title }}</el-col> <el-col :span="6" class="dialog-detail-title">新闻内容:</el-col> <el-col :span="18" class="dialog-detail-content"> <div v-html="detailForm.content"></div> </el-col></el-col>

 

wangEditor4 加字数、空格,光标会跑到最后问题复现:

wangEditor在默认情况下,父组件给其设置内容后光标会处于首端,不符合需求。网上找的直接通过js操作的方法经过尝试没有作用(也可能是没写对),官方文档也没找到合适的方法。最终经过一番尝试后成功解决,特此记录,希望能帮到有类似需求的人。

解决:

在父组件与wangEditor通信的双向绑定数据value的watch方法中,增加一句:

this.editor.selection.moveCursor(this.editor.$textElem.elems[0],false);

 本来按照常见思路应该是放在聚焦监听函数onfocus中的,但是放在里面会报错:TypeError: Cannot read property ‘editor’ of undefined。如果放在onchange函数中倒是可以实现,不过会出现,光标先在前段显示,后跳到末尾的情况,总之放到value的watch方法中好。

watch: { value: function (value) { if (value !== this.phoneEditor.txt.html()) { this.phoneEditor.txt.html(this.value) //根据父组件传来的值设置html值 } this.phoneEditor.selection.moveCursor(this.phoneEditor.$textElem.elems[0], false); }, //value为编辑框输入的内容,这里我监听了一下值,当父组件调用得时候,如果给value赋值了,子组件将会显示父组件赋给的值}, },

 我是直接把上面watch里面的方法改写成如上

 

本文借鉴:Vue使用富文本quill-editor发送后台数据有标签问题: <p> - 简书 (jianshu.com)

wangEditor中使得光标处于文本末端的方法记录 

本文链接地址:https://www.jiuchutong.com/zhishi/287988.html 转载请保留说明!

上一篇:Chormedriver下载和安装(2022-09-12)(chormedriver安装)

下一篇:web前端综合案例——小兔鲜首页(html+css)(web前端综合案例开发离线作业1)

  • 华为potal00a什么型号呢(华为手机pottl00a)

    华为potal00a什么型号呢(华为手机pottl00a)

  • 抖音怎么合拍两个视频(抖音怎么合拍两个人合唱)

    抖音怎么合拍两个视频(抖音怎么合拍两个人合唱)

  • 微信相册里的照片如何删除(微信相册里的照片占内存吗)

    微信相册里的照片如何删除(微信相册里的照片占内存吗)

  • 微信发朋友圈的视频模糊怎么办(微信发朋友圈的标签怎么删除)

    微信发朋友圈的视频模糊怎么办(微信发朋友圈的标签怎么删除)

  • 电脑键盘膜有必要贴吗(电脑键盘膜是贴上去的吗?)

    电脑键盘膜有必要贴吗(电脑键盘膜是贴上去的吗?)

  • 换路由器需要宽带账号密码吗(换路由器要换套餐吗)

    换路由器需要宽带账号密码吗(换路由器要换套餐吗)

  • ups不间断电源能供电多久(UPS不间断电源能给照明供电吗)

    ups不间断电源能供电多久(UPS不间断电源能给照明供电吗)

  • 手机用一会儿就发热是怎么回事(手机用一会儿就发热怎么回事)

    手机用一会儿就发热是怎么回事(手机用一会儿就发热怎么回事)

  • 无线身份验证出现问题是什么原因(无线身份验证出现问题是什么原因造成的)

    无线身份验证出现问题是什么原因(无线身份验证出现问题是什么原因造成的)

  • 抖音私信显示已读(抖音私信显示已送达是什么意思)

    抖音私信显示已读(抖音私信显示已送达是什么意思)

  • 拼多多勋章墙如何查看?(拼多多勋章墙在哪个页面)

    拼多多勋章墙如何查看?(拼多多勋章墙在哪个页面)

  • 模拟电子技术和数字电子技术的区别(模拟电子技术和高频电路的区别与联系)

    模拟电子技术和数字电子技术的区别(模拟电子技术和高频电路的区别与联系)

  • 苹果系统能用office吗(苹果系统能用WPS吗)

    苹果系统能用office吗(苹果系统能用WPS吗)

  • 淘宝设置提醒怎么取消(淘宝设置提醒怎样取消)

    淘宝设置提醒怎么取消(淘宝设置提醒怎样取消)

  • iphone11怎么关闭屏幕使用时间(iphone11怎么关闭运行程序)

    iphone11怎么关闭屏幕使用时间(iphone11怎么关闭运行程序)

  • qq音乐怎么下载到桌面(qq音乐怎么下载歌曲)

    qq音乐怎么下载到桌面(qq音乐怎么下载歌曲)

  • 手机wps绘制表格(手机wps绘制表格怎么操作)

    手机wps绘制表格(手机wps绘制表格怎么操作)

  • 苹果xsmax怎么拍广角(苹果xsmax怎么拍超广角)

    苹果xsmax怎么拍广角(苹果xsmax怎么拍超广角)

  • 苹果输入法符号在哪(苹果输入法符号怎么找)

    苹果输入法符号在哪(苹果输入法符号怎么找)

  • 抖音怎么不让别人艾特我(抖音怎么不让别人看到我的喜欢)

    抖音怎么不让别人艾特我(抖音怎么不让别人看到我的喜欢)

  • 抖音个人主页草稿箱在哪里(抖音个人主页草稿箱别人能看到吗)

    抖音个人主页草稿箱在哪里(抖音个人主页草稿箱别人能看到吗)

  • qq农场还有吗(qq农场还能玩吗?)

    qq农场还有吗(qq农场还能玩吗?)

  • oppoa9是什么型号(oppo a9是什么型号?)

    oppoa9是什么型号(oppo a9是什么型号?)

  • 抖音随拍只能好友看吗(抖音随拍只能好友才能看吗)

    抖音随拍只能好友看吗(抖音随拍只能好友才能看吗)

  • 万年历怎么调时间(万年历怎么调时间日期和温度)

    万年历怎么调时间(万年历怎么调时间日期和温度)

  • 注释怎么添加(word表格下方注释怎么添加)

    注释怎么添加(word表格下方注释怎么添加)

  • Vue学习——【第四弹】(vue系列教程)

    Vue学习——【第四弹】(vue系列教程)

  • 税务师事务所是代理记账公司吗
  • 所得税多交退税分录
  • 公积金做账需要计提吗怎么做
  • 叉车折旧年限是多少年
  • 商品和服务税收分类编码
  • 发出商品的会计核算
  • 固定资产盘亏造成的损失计入什么科目
  • 递延所得税当期发生额
  • 突然收到银联入账收入怎么办
  • 股东打入公户的钱怎么做账
  • 残疾人保障金缴纳比例是月1.5%
  • 纳税人为ETC卡充值取得财政票据进项税额抵扣问题
  • 建筑行业一般纳税人税率是多少
  • 制造费用包括劳动保护费吗
  • 支付青苗补偿费怎么做账
  • 营改增后还要交营业税吗
  • 全额抵扣的发票怎么申报增值税
  • 解决脱发的8个方法
  • 去年的费用今年报销如何记账
  • 公司换基本户需要多久
  • win7旗舰版如何恢复出厂设置
  • macbook隐藏
  • msgdlg.exe是什么意思
  • 确认收入的必要条件
  • dgservice.exe是什么软件
  • avgnt.exe
  • ecap.exe是什么意思
  • 继承房产印花税是按交易分额交吗
  • 房屋装修各项费用比例
  • php修改图片尺寸
  • php 解压
  • 车道线检测模型
  • cd oobe是什么命令
  • 伪静态html
  • python np数组
  • 其它应收款的处理程序
  • 生产型出口企业的概念
  • 新办企业发票核定及申领
  • 用房子贷款印花税怎么算
  • PostgreSQL中的XML操作函数代码
  • 小微企业免税销售额是多少2023年
  • 分配人工费的会计分录
  • 资本公积和盈余公积是什么意思
  • 一般纳税人购买固定资产进项税可以抵扣吗
  • 利润的敏感性分析怎么做?
  • 什么情况下需要异地预缴增值税
  • 建筑业发票可以抵扣制造业进项
  • 项目完工后员工工作总结
  • sqlserver重命名表名
  • Win10预览版拆弹
  • 32位与64位操作系统怎么区分从32位和64位的概念上进行讲述
  • windows7 设置
  • win8默认输入法设置
  • win10 version 1607 累积更新失败卡了怎么办
  • win10系统光盘制作
  • 使用windows防火墙禁止软件联网
  • win10总是锁定
  • win7网上邻居怎么共享文件数据
  • ie 无法打开
  • win7系统64位安装打印机的方法
  • 事件委托机制的三个主要组件
  • node.js实战
  • 什么叫屏蔽屏幕按键
  • 读长沙师范学院收费多少钱
  • python用于读取文本文件内容的方法
  • linux如何剪切文件
  • unity引擎叫什么
  • nodejs基础教程
  • js foreach倒序
  • css实现3d效果
  • Dojo Javascript 编程规范 规范自己的JavaScript书写
  • jquery 通过name获取元素
  • android 自定义style
  • 山东省省级政务服务区有哪些
  • 纽约消费税多少
  • 征管法第六十九条
  • 个人所得税核定征收的政策
  • 汉口市中心
  • 汽车票换票需要手续费吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设