• vue


    1、添加less 和less-loader支持

    npm install less less-loader --save-dev

    2、新建main.less,将这个样式添加到home.vue中的content标签上(添加之后页面可滚动)

    .content-wrapper{
      padding: 18px;
      height: ~"calc(100% - 80px)";
      overflow: auto;
    }

    3、main.less需要在home.vue中引入

     import '../main.less'

    4、添加富文本编辑

    https://liubing.me/vue-tinymce-5.html

    npm install @tinymce/tinymce-vue -S
    npm install tinymce -S

    5、创建edit-post.vue

    <template>
      <div class="editor">
        <TinymceEditor ref="editor" v-model="content" :disabled="disabled" @onClick="onClick"></TinymceEditor>
      </div>
    </template>
    
    <script>
      import TinymceEditor from '@/components/tinymce-editor'
    
      export default {
        name: "EidtPost",
        components: {
          TinymceEditor
        },
        data() {
          return {
            content: 'Welcome to Use Tinymce Editor',
            disabled: false
          }
        },
        methods: {
          // 鼠标单击的事件
          onClick(e, editor) {
            console.log('Element clicked')
            console.log(e)
            console.log(editor)
          },
          // 清空内容
          clear() {
            this.$refs.editor.clear()
          }
        }
      }
    </script>
    
    <style scoped>
      .editor {
        padding: 20px;
        height: 100%;
        margin-left: 10%;
        margin-right: 10%;
      }
    
    </style>

    6、创建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'
      // 编辑器插件plugins
      // 更多插件参考:https://www.tiny.cloud/docs/plugins/
      import 'tinymce/plugins/image'// 插入上传图片插件
      import 'tinymce/plugins/media'// 插入视频插件
      import 'tinymce/plugins/table'// 插入表格插件
      import 'tinymce/plugins/lists'// 列表插件
      import 'tinymce/plugins/wordcount'// 字数统计插件
      export default {
        components: {
          Editor
        },
        props: {
          value: {
            type: String,
            default: ''
          },
          disabled: {
            type: Boolean,
            default: false
          },
          plugins: {
            type: [String, Array],
            default: 'lists image media table wordcount autoresize'
          },
          toolbar: {
            type: [String, Array],
            default: 'undo redo |  formatselect | bold italic forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | lists image media table | removeformat'
          }
        },
        data () {
          return {
            init: {
              language_url: '/static/tinymce/langs/zh_CN.js',
              language: 'zh_CN',
              skin_url: '/static/tinymce/skins/ui/oxide',
              // skin_url: '/tinymce/skins/ui/oxide',//暗色系
              height: document.body.clientHeight * 0.8,
              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_handler: (blobInfo, success, failure) => {
                const img = 'data:image/jpeg;base64,' + blobInfo.base64()
                success(img)
              }
            },
            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>
      .editor {
        padding: 20px;
        height: 100%;
        margin-left: 10%;
        margin-right: 10%;
      }
    
    </style>

    页面显示:

     下一篇:https://www.cnblogs.com/nxzblogs/p/10923014.html

  • 相关阅读:
    为什么越来越少的人用jQuery
    远程工作是一种怎样的体验?
    JavaScript黑客是这样窃取比特币的,Vue开发者不用担心!
    原有vue项目接入typescript
    ES6核心特性
    强烈推荐10个值得订阅的国外技术周报
    jquery ajax超时设置(转载)
    Multiple “order by” in LINQ(转载)
    Cookies, Claims and Authentication in ASP.NET Core(转载)
    Json.NET序列化后包含类型,保证序列化和反序列化的对象类型相同(转载)
  • 原文地址:https://www.cnblogs.com/nxzblogs/p/10927028.html
Copyright © 2020-2023  润新知