富文本编辑器vue-quill-editor的安装以及自定义字体和字号(最为重要的是解决获取不到编辑框中的内容)

安装

第一步:安装


npm install @vueup/vue-quill@latest --save




第三步:在需要的页面中引入
<template>
<div>
 <QuillEditor  theme="snow" :options="editor.editorOption"  />
</div>
</template>


<script lang="ts" setup>
import {Quill} from "@vueup/vue-quill";
// 自定义字体大小
const Size = Quill.import('attributors/style/size')
Size.whitelist = [false, '12px', '14px', '16px', '18px', '20px', '32px']
Quill.register(Size, true)

// 自定义字体类型
const fonts = [false, 'SimSun', 'SimHei', 'Microsoft-YaHei', 'KaiTi', 'FangSong', 'Arial', 'Times-New-Roman', 'sans-serif',
    '宋体', '黑体'
]
// const Font = Quill.import('formats/font') 不可用
const Font = Quill.import('attributors/style/font')
Font.whitelist = fonts
Quill.register(Font, true)



const editor = ref({
    content: '',
    editorOption: {
        modules: {
            toolbar: [
                ['bold', 'italic', 'underline', 'strike'], // 加粗 斜体 下划线 删除线
                ['blockquote', 'code-block'], // 引用  代码块
                [{ list: 'ordered' }, { list: 'bullet' }], // 有序、无序列表
                [{ script: 'sub' }, { script: 'super' }], // 上标/下标
                [{ indent: '-1' }, { indent: '+1' }], // 缩进
                // [{ size: ['small', 'normal', 'large', 'huge'] }], // 字体大小
                [{ size: Size.whitelist }], // 字体大小
                [{ header: [1, 2, 3, 4, 5, 6, false] }], // 标题
                [{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色
                [{ font: Font.whitelist }], // 字体种类
                [{ align: [] }], // 对齐方式
                ['clean'], // 清除文本格式
                // ['link', 'image', 'video'] // 链接、图片、视频
                ['link', 'image'] // 链接、图片、视频
            ]
        },
        placeholder: '请输入内容...'
    }
})
</script>
<style scoped lang='less'>
p {
    margin: 10px;
}
.edit_container,
.quill-editor {
    width: 1010px;
    height: 460px;
}

/deep/ .ql-snow .ql-picker {
    line-height: 24px;
}
/deep/ .ql-container {
    height: 400px;
    overflow: auto;
}
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label::before,
/deep/.ql-snow .ql-picker.ql-size .ql-picker-item::before {
    content: "字号";
}

/deep/.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="12px"]::before,
/deep/.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="12px"]::before {
    content: '12px';
}
/deep/.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="14px"]::before,
/deep/.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="14px"]::before {
    content: "14px";
}
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="16px"]::before,
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="16px"]::before {
    content: "16px";
}
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="18px"]::before,
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="18px"]::before {
    content: "18px";
}
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="20px"]::before,
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="20px"]::before {
    content: "20px";
}
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="32px"]::before,
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="32px"]::before {content: "32px";
}

/deep/ .ql-snow .ql-picker.ql-header .ql-picker-label::before,
/deep/.ql-snow .ql-picker.ql-header .ql-picker-item::before {
    content: "正文" !important;
}
/deep/ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
/deep/.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
    content: "标题1" !important;
}
/deep/ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
/deep/.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
    content: "标题2" !important;
}
/deep/ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
/deep/.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
    content: "标题3" !important;
}
/deep/ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
/deep/ .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
    content: "标题4" !important;
}
/deep/ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
/deep/.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
    content: "标题5" !important;}
/deep/ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
/deep/ .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
    content: "标题6" !important;
}
/deep/ .ql-snow .ql-picker.ql-font .ql-picker-label::before,
/deep/ .ql-snow .ql-picker.ql-font .ql-picker-item::before {
    content: "字体" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="Arial"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="Arial"]::before {
    content: "Arial" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="SimSun"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="SimSun"]::before {
    content: "SimSun" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="SimHei"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="SimHei"]::before {
    content: "SimHei" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="Microsoft-YaHei"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="Microsoft-YaHei"]::before {
    content: "微软雅黑" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="Arial"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="Arial"]::before {
    content: "Arial" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="Times-New-Roman"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="Times-New-Roman"]::before {
    content: "罗马" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="KaiTi"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="KaiTi"]::before {
    content: "楷体" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="sans-serif"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="sans-serif"]::before {
    content: "sans-serif" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="宋体"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="宋体"]::before {
    content: "宋体" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="黑体"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="黑体"]::before {
    content: "黑体" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="FangSong"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="FangSong"]::before {
    content: "仿宋" !important;
}
</style>

第二步:在main.js或是main.ts中全局引入(具体全局引入还是单文件引入看自己项目),在这里我是全局引入


import { QuillEditor } from '@vueup/vue-quill'
import '@vueup/vue-quill/dist/vue-quill.snow.css';

const app = createApp(App)
app.component('QuillEditor', QuillEditor)

第三步:在需要的页面中引入


<template>
	<div>
 		<QuillEditor  theme="snow" :options="editor.editorOption"  />
	</div>
</template>


<script lang="ts" setup>
import {Quill} from "@vueup/vue-quill";
// 自定义字体大小
const Size = Quill.import('attributors/style/size')
Size.whitelist = [false, '12px', '14px', '16px', '18px', '20px', '32px']
Quill.register(Size, true)

// 自定义字体类型
const fonts = [false, 'SimSun', 'SimHei', 'Microsoft-YaHei', 'KaiTi', 'FangSong', 'Arial', 'Times-New-Roman', 'sans-serif',
    '宋体', '黑体'
]
// const Font = Quill.import('formats/font') 不可用
const Font = Quill.import('attributors/style/font')
Font.whitelist = fonts
Quill.register(Font, true)



const editor = ref({
    content: '',
    editorOption: {
        modules: {
            toolbar: [
                ['bold', 'italic', 'underline', 'strike'], // 加粗 斜体 下划线 删除线
                ['blockquote', 'code-block'], // 引用  代码块
                [{ list: 'ordered' }, { list: 'bullet' }], // 有序、无序列表
                [{ script: 'sub' }, { script: 'super' }], // 上标/下标
                [{ indent: '-1' }, { indent: '+1' }], // 缩进
                // [{ size: ['small', 'normal', 'large', 'huge'] }], // 字体大小
                [{ size: Size.whitelist }], // 字体大小
                [{ header: [1, 2, 3, 4, 5, 6, false] }], // 标题
                [{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色
                [{ font: Font.whitelist }], // 字体种类
                [{ align: [] }], // 对齐方式
                ['clean'], // 清除文本格式
                // ['link', 'image', 'video'] // 链接、图片、视频
                ['link', 'image'] // 链接、图片、视频
            ]
        },
        placeholder: '请输入内容...'
    }
})
</script>
<style scoped lang='less'>
p {
    margin: 10px;
}
.edit_container,
.quill-editor {
    width: 1010px;
    height: 460px;
}

/deep/ .ql-snow .ql-picker {
    line-height: 24px;
}
/deep/ .ql-container {
    height: 400px;
    overflow: auto;
}
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label::before,
/deep/.ql-snow .ql-picker.ql-size .ql-picker-item::before {
    content: "字号";
}

/deep/.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="12px"]::before,
/deep/.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="12px"]::before {
    content: '12px';
}
/deep/.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="14px"]::before,
/deep/.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="14px"]::before {
    content: "14px";
}
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="16px"]::before,
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="16px"]::before {
    content: "16px";
}
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="18px"]::before,
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="18px"]::before {
    content: "18px";
}
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="20px"]::before,
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="20px"]::before {
    content: "20px";
}
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="32px"]::before,
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="32px"]::before {content: "32px";
}

/deep/ .ql-snow .ql-picker.ql-header .ql-picker-label::before,
/deep/.ql-snow .ql-picker.ql-header .ql-picker-item::before {
    content: "正文" !important;
}
/deep/ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
/deep/.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
    content: "标题1" !important;
}
/deep/ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
/deep/.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
    content: "标题2" !important;
}
/deep/ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
/deep/.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
    content: "标题3" !important;
}
/deep/ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
/deep/ .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
    content: "标题4" !important;
}
/deep/ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
/deep/.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
    content: "标题5" !important;}
/deep/ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
/deep/ .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
    content: "标题6" !important;
}
/deep/ .ql-snow .ql-picker.ql-font .ql-picker-label::before,
/deep/ .ql-snow .ql-picker.ql-font .ql-picker-item::before {
    content: "字体" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="Arial"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="Arial"]::before {
    content: "Arial" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="SimSun"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="SimSun"]::before {
    content: "SimSun" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="SimHei"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="SimHei"]::before {
    content: "SimHei" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="Microsoft-YaHei"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="Microsoft-YaHei"]::before {
    content: "微软雅黑" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="Arial"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="Arial"]::before {
    content: "Arial" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="Times-New-Roman"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="Times-New-Roman"]::before {
    content: "罗马" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="KaiTi"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="KaiTi"]::before {
    content: "楷体" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="sans-serif"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="sans-serif"]::before {
    content: "sans-serif" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="宋体"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="宋体"]::before {
    content: "宋体" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="黑体"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="黑体"]::before {
    content: "黑体" !important;
}
/deep/.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="FangSong"]::before,
/deep/.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="FangSong"]::before {
    content: "仿宋" !important;
}
</style>

最后有些同学可能组件上面数据双向绑定了,但是获取不到数据,在这里我们可以通过以下方式获取

第一步:组件绑定ref
例如: <QuillEditor ref="quillRef" theme="snow" :options="editor.editorOption"  />
第二步:在script标签中声明 const quillRef = ref(null)
第三步:在你需要的内容的地方获取一下,具体看自己的项目,在这里我直接打印一下:
console.log(quillRef.value.getHTML())
亲测可用!!!!
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

herry-弟弟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值