tinymce 编辑器踩坑之旅----------自定义插件

针对之前写的要更新一下,因为一直在本地开发,所以没想到最后打包会出现问题

在这里插入图片描述
这很显然,就是文件路径找不到了。

所以针对之前为了开发需求而来的办法显然是行不通的,就算行得通了,也会给自己留下大坑。

所以针对路径问题,我想了很多办法,显示换个地方放到public目录下面,打包之后还是找不到文件,依旧存在上述截图问题。

既然文件里面是require文件的,所以修改html问价 使用script方式引入是没问题的,但是总觉得在vue项目里面不应该这么干,于是找了老大讨论了一下。

针对vue-cli3官网和tinymce官网的文档来看,其实编辑器和我拆分写组件似乎没什么问题,于是我们可以把之前的js代码直接写成一个function,然后export一下,在使用的组件里面import之后调用一下,再试试打包。

在这里插入图片描述
在这里插入图片描述

这样一来,直接挂载都不用了,可以直接调用,然后打包,运行成功。

所以项目开发中遇到要自定义插件的话,千万不要投机取巧,按照规范开发,给自己避免大坑。

————————以下是原文章——————
先贴个官网地址 https://www.tiny.cloud/docs/

最近开发项目中产品有很多需求,比如说在编辑器里面html代码,本来一开始用的是vue集成的那个编辑器,然后就发现,不能显示table!!!!样式

无奈之下找了找好像tinymce这个编辑器可以满足,但是在此之前没用过,所以去通读了一边官方网址,了解了一些基本东西。

然后开干

最开始么肯定是先安装一下插件

npm install tinymce/tinymce-vue  --save
npm install tinymce  --save

然后在src文件夹下面创建components文件夹,在此文件夹下面创建我们要用的富文本编辑器的组件文件。

根目录下建一个index.js文件夹,输出公共组件
在这里插入图片描述

import Vue from 'vue'
const componentList = require.context('.', true, /index.vue/)

const hyphenate = (name) => {
   
  return name.replace(/\B([A-Z])/g, '-$1').toLowerCase()
}

componentList.keys().forEach(item => {
   
  const componentItem = componentList(item).default
  Vue.component(hyphenate(componentItem.name), componentItem)
})

tinymce 编辑器代码 ,组件传值什么都是自己封装的,所以根据需求而定在这里插入图片描述
注意,全局这样输出组件名称的时候,文件内的name一定要和文件夹名称同名,否则就会报错
在这里插入图片描述
用法就直接在需要的地方注入就可以了
在这里插入图片描述
因为产品需求可能需要拔取别的网页下来改东西,所以很多扒下来的页面的样式写在内联或者style标签里面,所以导致了样式不显示!!!

为了解决这个问题翻遍官网,最后终于有一个可以实现,初始化的时候加上下面的代码

custom_elements:"style,html,head,body,title,meta",//允许自定义标签存在

只要加上这句,页面就可以正常回显

紧接着就是toolbar工具栏的问题,官网已经说的很清楚,toolbar可以根据自己需求而去配置相关的工具,所以有些需要引入一些插件

在这里插入图片描述
然后很有可能它现有的插件功能不是产品想要的,所以你还得改代码。

翻遍官网没有发现可以手动更在toolbar插件的方法,但是可以自定义,所以这个就需要自己动动手指改一下。

首先找到要改动的源码,复制一份放到static文件夹下面,建一个plugins的文件夹

在这里插入图片描述
我这里改的是插入链接的方法。

复制好了以后便可以对代码进行更改,于是需要熟读一边源码,不然牵一发动全身,console报错一片红。

自己自定义富文本编辑器插件的时候,需要挂在以下tinymce,不然报错,tinymce is not undefiend

import tinymce from 'tinymce/tinymce'
window.tinymce = tinymce

修改toolbar最重要的几个地方需要记录一下

第一个,引入插件

import '@/static/plugins/tinymce/fishLink'

使用
在这里插入图片描述
自定义一个Dialog对话框,也就是根据工具栏的icon 弹出窗。

var makeDialog = function (settings, onSubmit, editor) {
   
      var displayText = settings.anchor.text.map(function () {
   
        return {
   
          name: 'text',
          type: 'input',
          label: '请输入文本,该文本将会被转为超链接;点击后将跳转为您所配置的钓鱼页面'
        };
      }).toArray();
      var defaultTarget = Optional.from(getDefaultLinkTarget(editor));
      var initialData = getInitialData(settings, defaultTarget
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左撇子没秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值