• vue 配置 TinyMCE


    1、index.html 增加cdn 地址

      <script src="//cdn.bootcss.com/tinymce/5.0.16/tinymce.min.js"></script>

    2、组件目录创建编辑器的组件

      cd components

      touch tinymce-editor.vue

      创建内容:

      

    <template>
      <div class="tinymce-editor">
        <editor v-model="myValue"
          :init="init"
          :disabled="disabled"
          @onClick="onClick">
        </editor>
      </div>
    </template>
    
    <script>
    import tinymce from 'tinymce/tinymce'
    import Editor from '@tinymce/tinymce-vue'
    import 'tinymce/themes/silver/theme'
    import 'tinymce/plugins/image'
    import 'tinymce/plugins/media'
    import 'tinymce/plugins/lists'
    import 'tinymce/plugins/wordcount'
    import 'tinymce/plugins/colorpicker'
    
    export default {
      components: {
        Editor
      },
      props: {
        //传入一个value,使组件支持v-model绑定
        value: {
          type: String,
          default: ''
        },
        disabled: {
          type: Boolean,
          default: false
        },
        plugins: {
          type: [String, Array],
          default: 'lists image media wordcount advlist bbcode code charmap emoticons insertdatetime preview'
        },
        toolbar: {
          type: [String, Array],
          default: 'undo redo | fontselect fontsizeselect bold italic | forecolor backcolor | superscript subscript charmap insertdatetime emoticons| lists image media | numlist | preview code removeformat | alignleft aligncenter alignright alignjustify | bullist outdent indent'
        }
      },
      data() {
        return {
          //初始化配置
          init: {
            // language_url: '/static/tinymce/langs/zh_CN.js',
            // language: 'zh_CN',
            skin_url: '/static/tinymce/skins/ui/oxide',
            height: 150,
            plugins: this.plugins,
            toolbar: this.toolbar,
            branding: false,
            menubar: false,
            //此处为图片上传处理函数,这个直接用了base64的图片形式上传图片,
            //如需ajax上传可参考https://www.tiny.cloud/docs/configure/file-image-upload/#images_upload_handler
            //images_upload_url:"/common/uploadImg",
            images_upload_handler: function (blobInfo, succFun, failFun) {
            var xhr, formData;
            var file = blobInfo.blob();//转化为易于理解的file对象
            xhr = new XMLHttpRequest();
            xhr.withCredentials = false;
            xhr.open('POST', '/common/uploadImg');
            xhr.onload = function() {
                var json;
                if (xhr.status != 200) {
                    failFun('HTTP Error: ' + xhr.status);
                    return;
                }
                json = JSON.parse(xhr.responseText);
                if (!json || typeof json.data.urlExt != 'string') {
                    failFun('Invalid JSON: ' + xhr.responseText);
                    return;
                }
                succFun(json.data.urlExt);
            };
            formData = new FormData();
            formData.append('file', file, file.name );//此处与源文档不一样
            xhr.send(formData);
            },
            file_picker_types: 'file image media',
            file_picker_callback: function(callback, value, meta) {
              // Provide file and text for the link dialog
              //要先模拟出一个input用于上传本地文件
              var input = document.createElement('input');
                  input.setAttribute('type', 'file');
                  //你可以给input加accept属性来限制上传的文件类型
                  //例如:input.setAttribute('accept', '.jpg,.png');
              input.click();
              input.onchange = function() {
                  var file = this.files[0];
    
                  var xhr, formData;
                  console.log(file.name);
                  xhr = new XMLHttpRequest();
                  xhr.withCredentials = false;
                  xhr.open('POST', '/common/uploadImg');
                  xhr.onload = function() {
                      var json;
                      if (xhr.status != 200) {
                          failure('HTTP Error: ' + xhr.status);
                          return;
                      }
                      json = JSON.parse(xhr.responseText);
                      if (!json || typeof json.data.urlExt != 'string') {
                          failure('Invalid JSON: ' + xhr.responseText);
                          return;
                      }
                      callback(json.data.urlExt);
                  };
                  formData = new FormData();
                  formData.append('file', file, file.name );
                  xhr.send(formData);
              }
            }
          },
          myValue: this.value
        }
      },
      mounted() {
        tinymce.init({})
      },
      methods: {
        //添加相关的事件,可用的事件参照文档=> https://github.com/tinymce/tinymce-vue => All available events
        //需要什么事件可以自己增加
        onClick(e) {
          this.$emit('onClick', e, tinymce)
        },
        //可以添加一些自己的自定义事件,如清空内容
        clear() {
          this.myValue = ''
        }
      },
      watch: {
        value(newValue) {
          this.myValue = newValue
        },
        myValue(newValue) {
          this.$emit('input', newValue)
        }
      }
    }
    
    </script>
    <style scoped>
    </style>
    

       1.上面我注释了中文插件包,需要的可以自己下载。

       2. skin_url 定义为自己的目录路径地址,网上很多的做法是node install 之后,把css目录复制到项目中

       3.上传文件/图片/媒体,注意返回的json 格式,里面要替换为你自己的格式。

    3、使用组件。

      index.vue:

      

    <template>
    <tinymce-editor v-model="myValue"
    @onClick="onClick"
    ref="editor"></tinymce-editor>
    </template>
    <script>
    import TinymceEditor from '../../components/tinymce-editor'
      export default {
        //引用组件
        components: { TinymceEditor },
        methods: {  
          onClick(e, editor) {
            // console.log('Element clicked')
            // console.log(e)
            // console.log(editor)
          },
          clear() {
            this.$refs.editor.clear()
          }
         }
      }
    </script>
    

      是不是很简单?有问题可以留言找我

      

  • 相关阅读:
    排序希尔排序
    Sentinel 限流
    排序基数排序
    【ProToolkit范例之三】遍历模型下的所有Feature
    【ProToolkit范例之四】创建udf
    【ProToolkit范例之五】输出Asm的架构
    鼠标滚轮改变文本框值的jQuery插件cutePsWheel发布
    自己做手做“分享到”小工具
    深入理解jQuery AJAX调用页面内Web服务
    没错,你没有看错,博客园Android客户端开源了!
  • 原文地址:https://www.cnblogs.com/already/p/12012752.html
Copyright © 2020-2023  润新知