首页 > 其他分享 >vue中使用tinymce

vue中使用tinymce

时间:2022-11-23 13:33:09浏览次数:51  
标签:vue default 使用 tinymce element props js

之前使用了好几种引用tinymce的方式都已失败而告终,也找原因了。因为下面这个还是成功了,记录一下

 

1、引用tinymce-vue

npm i @tinymce/tinymce-vue -S

2、封装控件

<template>
    <div>
        <Editor :id="tinymceId" :init="init" :disabled="disabled" v-model="myValue" ></Editor>
    </div>
</template>

<script>
    //引入tinymce-vue
    import Editor from '@tinymce/tinymce-vue'
     //公共的图片前缀
    //import Global from "./Global";
    export default {
        components: {Editor},
        props: {
            //编号
            id:{
                type:String
            },
            //内容
            value: {
                type: String,
                default: ''
            },
            //是否禁用
            disabled: {
                type: Boolean,
                default: false
            },
            //插件
            plugins: {
                type: [String, Array],
                default: 'print preview searchreplace autolink directionality visualblocks visualchars fullscreen image link media template code codesample table charmap hr pagebreak nonbreaking anchor insertdatetime advlist lists wordcount imagetools textpattern help emoticons autosave bdmap indent2em autoresize formatpainter axupimgs',
            },
             //工具栏
            toolbar: {
                type: [String, Array],
                default: 'code undo redo restoredraft | fullscreen | cut copy paste pastetext | forecolor backcolor bold italic underline strikethrough link anchor | alignleft aligncenter alignright alignjustify outdent indent | \
    styleselect formatselect fontselect fontsizeselect | bullist numlist | blockquote subscript superscript removeformat | \
    table image media charmap emoticons hr pagebreak insertdatetime print preview | bdmap indent2em lineheight formatpainter axupimgs',
            }
        },
        data() {
            let that = this;
            return {
                tinymceId: this.id || 'vue-tinymce'+ Date.parse(new Date()),
                myValue :this.value,
                init:{
                  //汉化,路径是自定义的,一般放在public或static里面,汉化文件要自己去下载
                  language_url: '/tinymce/zh_CN.js',
                  language: 'zh_CN',
                  //皮肤
                  skin: 'oxide',
                  //插件
                  plugins: this.plugins,
                  //工具栏
                  toolbar: this.toolbar,
                  //高度
                  height: 500,
                  //图片上传
                  images_upload_handler: function (blobInfo, success, failure) {
                      //文件上传的formData传递,忘记为什么要用这个了
                      let formData = new FormData();
                      formData.append('file', blobInfo.blob(), blobInfo.filename());
                      //上传的api,和后端配合,返回的是图片的地址,然后加上公共的图片前缀
                      that.$api.system.uploadImage(formData).then(res=>{
                          var url = "tt"//Global.baseUrlImg + res;
                          console.log(url)
                          success(url)
                      }).catch(res => {
                          failure('图片上传失败')
                      });
                  }
                }
            }
        },
        methods:{

        },
        watch: {
            //监听内容变化
            value(newValue) {
                this.myValue = newValue
            },
            myValue(newValue) {
                this.$emit('input', newValue)
            }
        }
    }
</script>
<style>

    .tox-notifications-container{
        display: none;
    }
    /*在页面正常使用时不用加这个样式,在弹窗使用时,要加这个样式,因为使用弹窗,z-index层数比较低,工具栏的一些工具不能使用,要将z-index层数提高。*/
.tox.tox-silver-sink.tox-tinymce-aux{ z-index: 2100 !important; } 

</style>

 

3、引用

<template>
  <div>
    <TinymceEditor :value="content" @input="newContent"></TinymceEditor>
  </div>
</template>

<script>
import TinymceEditor from "@/components/tinymce/index.vue"
export default {
    components: {
        TinymceEditor
    },
    data() {
        return {
            content:""
        }
    },
    methods: {
    //获取富文本的内容
    newContent(val){
        this.$set(this.currInfo,"content",val);
    }
  }
}
</script>

 

4、控件tinymce-vue引用的插件会从网络上下载,如:

     https://cdn.tiny.cloud/1/no-api-key/tinymce/5.10.6-132/plugins/advlist/plugin.min.js

     如果没有外网的话,可以找到文件@tinymce\tinymce-vue\lib\es2015\main\ts\components\Editor.js

     将ScriptLoader.load(this.element.ownerDocument, scriptSrc, initialise(this));

     改为红色部分      再安装tinymce       npm i [email protected] -S      并将node_model下的tinymce 拷贝到static文件夹下(static文件夹和src同级)
    mounted: function () {
        this.element = this.$el;
        if (getTinymce() !== null) {
            initialise(this)();
        }
        else if (this.element && this.element.ownerDocument) {
            var channel = this.$props.cloudChannel ? this.$props.cloudChannel : '5';
            var apiKey = this.$props.apiKey ? this.$props.apiKey : 'no-api-key';
            var scriptSrc = isNullOrUndefined(this.$props.tinymceScriptSrc) ?
                "https://cdn.tiny.cloud/1/" + apiKey + "/tinymce/" + channel + "/tinymce.min.js" :
                this.$props.tinymceScriptSrc;
            //ScriptLoader.load(this.element.ownerDocument, scriptSrc, initialise(this));
            ScriptLoader.load(this.element.ownerDocument, "static/tinymce/tinymce.min.js", initialise(this));
        }
    },

 

标签:vue,default,使用,tinymce,element,props,js
From: https://www.cnblogs.com/helloStone/p/16918001.html

相关文章

  • 使用 Docker 运行 mongodb
    基本命令dockerrun-p27017:27017-v/home/cl/mongo5:/data/db--namemongodb-dmongo:5创建账户密码db.createUser({user:'admin',pwd:'Aa123456',roles:[......
  • 第三章. 业务功能开发--登录验证(使用拦截器)
    第三章.业务功能开发--登录验证(使用拦截器)需求登录验证. 用户访问任何业务资源,都需要进行登录验证. *只有登录成功的用户才能访问业务资源 *没有登录成功的用户访......
  • oracle使用exp/imp导入导出(用户)
    zoukankan      html  css  js  c++  java oracle使用exp/imp导入导出(用户) 实例,从远程机器上导出nxgy用户的所有对象和数据,然后导入到本机数......
  • 搭建vue3脚手架
    vite搭建脚手架:npminitvite@latest(y)yvite-demoVueTypeScriptvue搭建脚手架:PSD:\personalSite>npminitvue@latestnpmWARNconfigglobal--global,--loc......
  • vue 2 中防抖节流在当前页面里写
    isfilter(val){   //过滤   this.debounce(()=>{    this.init(val);   },1000);  },  debounce(fn,delay){   v......
  • Docker Registry部署+基本使用
    目录1、容器部署2、部署后操作3、上传镜像4、查看镜像官网部署文档1、容器部署docker单节点:mkdir-p/root/container/registrydockerrun-itd-p5000:5000--res......
  • 主流BI软件,哪一个软件使用效果更好?
    数据对于一个企业的发展很重要,为了企业各部分的发展可以变得更好,企业能够更好的重视数据化确实是很重要的。而在企业数据化选择软件的时候,可以选择的软件种类也是比较多的。......
  • vue中key使用的问题
    前言在vue要求在遍历的时候最好加上key,在使用过程中总有些疑问,在这里做下分析1.不使用key的时候vue是怎么处理的在vue2.x文档中有如下描述key的特殊attribute主要......
  • 随想录(锁的来由和使用)
       对于开发系统级别软件的朋友来说,无论你是主动的还是被动的,锁的应用都是少不了的。很多人用锁,可是却未必知道锁的前世今生,什么时候用锁,什么时候不用锁?该用什么样的锁?......
  • CUDA中threadIdx、blockIdx、blockDim和gridDim的全称以及使用
    threadIdx是threadindex线程索引缩写blockIdx是blockindex块索引缩写blockDim是block dimension块维度缩写gridDim是grid dimension网格纬度缩写使用可参考cud......