首页 > 其他分享 >tinymce封装成vue3组件

tinymce封装成vue3组件

时间:2023-04-16 18:33:08浏览次数:34  
标签:封装 vue3 tinymce content init let plugins import

封装成组件

<script setup >
import Editor from '@tinymce/tinymce-vue'
//引入tinymce开启本地模式
import 'tinymce/tinymce'
//引入图标和主题等
import 'tinymce/themes/silver/theme'
import 'tinymce/icons/default/icons'
import 'tinymce/models/dom'
//引入插件
import 'tinymce/plugins/codesample'
import 'tinymce/plugins/lists'
import 'tinymce/plugins/advlist'
import 'tinymce/plugins/link'
import 'tinymce/plugins/autolink'
import 'tinymce/plugins/charmap'
import 'tinymce/plugins/emoticons'
import 'tinymce/plugins/fullscreen'
import 'tinymce/plugins/preview'
import 'tinymce/plugins/code'
import 'tinymce/plugins/searchreplace'
import 'tinymce/plugins/table'
import 'tinymce/plugins/visualblocks'
import 'tinymce/plugins/wordcount'
import 'tinymce/plugins/insertdatetime'
import 'tinymce/plugins/image'

const emit = defineEmits(['setData','file'])
const props = defineProps({
    value: {
        type: String,
        default: '',
    },
    disabled: {
        type: Boolean,
        default: false, 
    },
    init: { type: Object },
})

let initObj = reactive({
    // 选择器
    selector: 'textarea#tinymceVue',
    // 设置本地主题
    skin_url: '/tinymce/skins/ui/oxide',
    // 设置本地css
    content_css: '/tinymce/skins/content/default/content.css',
    // 设置本地plugins中emojis的位置,用来获取表情
    emoticons_database_url: '/tinymce/plugins/emoticons/js/emojis.js',
    // 设置本地语言
    language_url: '/tinymce/langs/zh-Hans.js',
    // 设置本地语言
    language: 'zh-Hans',
    // 设置工具栏
    toolbar: [
        'bold italic hr | fontsize forecolor backcolor | blocks blockquote removeformat | undo redo ',
        'bullist table insertdatetime | link charmap emoticons wordcount searchreplace code | codesample visualblocks image fullscreen preview',
    ],
    // 设置插件
    plugins: 'codesample lists advlist link autolink charmap emoticons fullscreen preview code searchreplace table visualblocks wordcount insertdatetime image',
    // 设置图片上传
    images_upload_handler: blobInfo => new Promise((resolve, reject) => {
        emit('file', blobInfo, resolve, reject)
    }),
})
//有新设定就覆盖init
if (props.init){
    Object.assign(initObj, props.init)
}
//content内容变量
let content = ref(props.value)
//更新父组件内容
const handlerFunction = () => {
    emit('setData', content.value)
}
</script>
<template>
     <Editor id="tinymceVue" v-model="content" :init="initObj" :disabled="disabled" @selectionChange="handlerFunction" />
</template>

使用

<script setup>
import tinymce from '@/components/tinymce.vue'

let data = ref('')

const getData = str => {
    data.value = str
}

let init = reactive({ })

let upFile = (blobInfo, resolve, reject) => {
    let formdata = new FormData()
    formdata.append('file', blobInfo.blob(), blobInfo.filename())
    ajax.post('/file/up', formdata).then(res => {
        resolve(res.url)
    }).catch(err => {
        reject(err)
    })
}
</script>
<template>
    <tinymce :value="data" @setData="getData" :init="init" @file="upFile" />
</template>

 

标签:封装,vue3,tinymce,content,init,let,plugins,import
From: https://www.cnblogs.com/lovewhatIlove/p/17238644.html

相关文章

  • Vue3组件通信直接参考案例
    https://juejin.cn/post/6999687348120190983#heading-7Vue3通信使用写法1.props用props传数据给子组件有两种方法,如下方法一,setup()方法写法//Parent.vue传送<child:msg1="msg1":msg2="msg2"></child><script>importchildfrom"./child.v......
  • react+ts+hook封装一个table分页组件(建议收藏,直接使用)
    前言大家好我是歌谣我是一名坚持写博客四年的博主最好的种树是十年前其次是现在,今天继续对antdesigntable的分页封装进行讲解封装准备(多看官网)jsx风格的api<><Table<User>columns={columns}dataSource={data}/>/*使用JSX风格的API*/<Table<User>data......
  • Vue3中(vite.config.js)配置打包的时候去除console.log
    参考:https://www.cnblogs.com/lovewhatIlove/p/16476165.html安装tersernpmadd-Dterservite中配置import{defineConfig}from"vite";importvuefrom"@vitejs/plugin-vue";importvueJsxfrom"@vitejs/plugin-vue-jsx";importvisua......
  • 3.Vue3.0 有什么更新
    1.监测机制的改变3.0将带来基于代理Proxy的observer实现,提供全语言覆盖的反应性跟踪。消除了Vue2当中基于Object.defineProperty的实现所存在的很多限制。2.只能监测属性,不能监测对象检测属性的添加和删除;检测数组索引和长度的变更;支持Map、Set、WeakMap和Weak......
  • Vue3组合API自动引入插件
    插件名:unplugin-auto-importurl:https://github.com/antfu/unplugin-auto-import安装1、下载插件npmiunplugin-auto-import-D2、配置vite.config.tsimportvuefrom'@vitejs/plugin-vue'import{defineConfig}from'vite'//引入插件,因为我使用的vite+ts,所以这里引......
  • vue3+echart5 遇到的坑 Cannot read properties of undefined (reading 'type')(转)
    原文:https://www.cnblogs.com/Bin-x/p/15342949.html1、错误说明vue3中,使用data的方式初始化echart图表exportdefault{data(){return{chart:null,...}},mounted(){this.chart=echarts.init(document.getElementById(this.id))......
  • vue3.2入门
    vue3.2版本开始可以使用语法糖!对于从2.0过来的人我就直接看3.2的语法了helloworld.vue<!--setup语法糖vue3.0的变量需要return出来才可以在template中使用,写法冗余vue3.2在script标签中添加setup解决问题组件只需要引入,不需要注册,属性方法不需要返回,不需要写setup......
  • vue3微信公众号商城项目实战系列(5)页面适配手机屏幕
    上一篇完成了2个页面之间的跳转,在浏览器中也可以正常浏览和跳转,但这2个页面并没有为适配手机屏幕设计,如果我们用chrome浏览器模拟手机屏幕的大小后再看,结果如下图:(注:用chrome模拟手机屏幕只需要在正常情况下按下F12键,然后点击红框2处的小图标就可以了,改变模拟屏幕的大小......
  • Delphi FDMemTable内存表用法及简单操作函数封装(转)
    在某些场景下当轻量级的应用需要在内存中缓存数量比较多且字段比较多的高频使用数据时。以前我都是采用Ini或直接使用sqlite数据库。JSON也试过基本无法或很难实现需要的功能,因为当涉及某一同类型对象多字段多列时不通过遍历基本无法直接取到或修改数据。这样就导致了效率的低下。......
  • vue3 父子组件共享响应式对象
    父组件<templatelang=""><div><divclass="greetings">按钮值:{{num}}</div><div><button@click="num++">按钮</button></div><div>iamparent</div&......