如今网络越来越发达,用网上的编辑器做文档或编程可简单太多!Vue就是这么个好用又火爆的前端框架,它有各种工具和技巧让你轻松搞定这些事情。接下来我们就来仔细研究下怎么在Vue里搞出一个在线编辑器,还会给你提供几个实战案例哦~
集成富文本编辑器
我们平时用Vue做网页时,想搞个在线编辑器,最方便就是把富文本编辑器放进去。像TinyMCE、Quill、CKEditor这样的富文本编辑器有很多实用功能,比如改变文字大小,放图片,制表格等等。下面咱们就拿Quill举个例子,看看怎么在Vue里运用它们!
首先,我们需要安装Quill。在命令行中运行以下命令:
bash npm install quill
接下来就是在Vue组件里玩转Quill!给你看个简单的例子:
“`javascript
import Quill from ‘quill’;
export default {
mounted() {
直接用Quill库,给编辑器元素起个名字,’#editor’,然后配好用的参数就可以了。,
theme: ‘snow’
});
},
beforeDestroy() {
this.quill = null;
}
}
这段脚本里,咱们先import了Quill,然后用mounted钩子函数搭出了个Quill编辑器。别忘了,在beforeDestroy里得把它给删了,防止内存占用过大!
自定义组件
有时候我们要做一些特别的事情,比如把本地的图片插进去,或者让代码变得更有特色。这个时候,就得自己动手写个小部件了。
下面是一个简单的Vue富文本编辑器组件示例:
props: [‘content’],
这章就用Quill,这个东西能帮我们在$ref=“editor”的区域里打造出自己想要的效果。
当我的文字有变化时,会自动触发这个函数。
我们来更新下内容,只要用这个方法就行了,’update:content’,然后把里面的东西换成quill.root.innerHTML。
methods: {
handleImageUpload(event) {
把文件上传给我看看,就用那个(点击)的file对象。
我们先来搞个表单数据。
把文件塞进formData的’file’属性里就行了。
// 发送图片上传请求
在axios中,我们用`post()`方法传入地址为’/upload’的参数和表单数据。随之,它会返回一个响应结果,我们可以通过`then()`来获取这个结果。
我们来看看如何简化这个任务。首先,要设置一个变量叫url,然后它的值就是响应数据里面的那个url字段。
来看看这个小技巧:你只需要用代码找出选择的文本范围。
你只需要这么干,把” url “这样输进代码里: // 这就是我们要说的方法,你的图片就会自动出现在文档中!
// });
}
这段代码里,咱们先把编辑器的文本内容交给props,然后用mount钩子来创建Quill实例。在这个过程中的text-change事件,会帮你监听内容有没有变。完成后,就用$emit把新内容发给父组件。而且,我们还给编辑器加了个可以上传图片的功能。在handleImageUpload这个方法里头,我们用FormData包装好要上传的图片,然后发起传输。这里的上传怎么搞,还得自己想办法!
配置和自定义功能
npm install quill
Quill有好多不错的设置选择,你想怎么定制都行!这儿给大家举几个例子看看吧:
const toolbarOptions = [
加上`bold`, `italic`, `underline`, `strike`等效果,就能给文字加粗,倾斜,画上虚线或者打个删除标记。
对了,这里有引用和代码区块。
[‘标题1’, ‘标题2’], // 两页的标题~
这边,给你看下(排列方式),有序的和子弹点的两种列表。
[ `sub`, `super` ], // 上/下标
{‘indent’: ‘-1’}, {‘indent’: ‘+1’} //减缩、加缩
import Quill from 'quill' export default { mounted() { this.quill = new Quill(this.$refs.editor) }, beforeDestroy() { this.quill = null } }
[‘direction’: ‘rtl’],这是要设置的文字方向。
{‘size’: [‘小’, ‘否’, ‘大’, ‘超大’] }, // 字号
[{‘header’: [1, 2, 3, 4, 5, 6, false]}], // 标题
{‘color’: [”]}, {‘background’:[”]}], // 设置字号颜色和背景颜色
{‘font’: []}}, // 字体样式
{‘align’: []}], // 不对齐
“清除””, // 直接清楚地说清意图
[‘链’, ‘图’, ‘视’] // 就是我们常说的,链接、图片和视频哦
];
theme: ‘snow’,
modules: {
toolbar: toolbarOptions
}
这段代码里,咱们设定了一个数组叫toolbarOptions,里面都是编辑功能。有了这些设置,就能随心所欲地定制编辑器的工具栏!
代码高亮
有时候我们需要在编辑器里插点小代码,得有代码好看点儿的效果。要知道,Quill文字编辑器可不会自动帮你把代码弄的很醒目,不过我们有办法!用别的库就能搞定这个问题。看下面这个例子就明白了:
我们要用到 highlight.js 这个插件!
导入highlight.js的默认样式。
我们把Block叫做Quill里边的“块”。
Block.tagName = ‘pre’;
Quill.register(Block, true);
syntax: {
咱们直接上重点,就是用hljs的 highlightAuto方法把文本变成高亮的格式。
},
toolbar: [
那就是加粗,斜体,下划线和删除线。
[‘blockquote’, ‘code-block’],
就是这俩[‘header’: 1], [‘header’: 2]。
[[‘正常’,’列表项目符号’],[‘项目符号列表’]]。
[‘只能用Sub脚本’, ‘也能试试Super脚本’]
大家好!我来了!先给你们看看取消首尾缩进并添加缩进的效果。
[{ ‘direction’: ‘rtl’ }],
import Quill from 'quill' export default { props: { value: { type: String, required: true } }, data() { return { quill: null, editorOptions: { modules: { toolbar: [ ['bold', 'italic', 'underline', 'strike'], ['link', 'image'], [{ 'list': 'ordered' }, { 'list': 'bullet' }] ] }, theme: 'snow' } } }, mounted() { this.quill = new Quill(this.$refs.editor, this.editorOptions) this.quill.root.innerHTML = this.value this.quill.on('text-change', this.handleChange) }, beforeDestroy() { this.quill.off('text-change', this.handleChange) this.quill = null }, methods: { handleChange() { this.$emit('input', this.quill.root.innerHTML) }, handleImageUpload() { const file = this.$refs.fileInput.files[0] const formData = new FormData() formData.append('file', file) // 发送图片上传请求 } } }
首先是[‘小’,’不选’,’大’,’超大’]这种选项,
[‘header’] = [1, 2, 3, 4, 5, 6, False]
[‘颜色’: [], ‘背景’: []],
[{ ‘font’: [] }],
[{ ‘align’: [] }],
[‘clean’],
[‘link’, ‘image’, ‘video’]
]
这儿,我们就直接把highlight.js这个库import进来,然后给Quill加点儿料,加个叫syntax的模块。这样弄好以后,代码块就能变得亮堂堂!
处理内容变化
实际上,我们得时刻注意编辑器里头内容有啥动静,然后赶紧搞定它。举个例子看看吧:
我的记事本更新的时候,会发生‘文本变化’事件。它就是当我输入或删除内容时,告诉我有什么改变和消息来源的那条线。
if (source === ‘user’) {
这个会发送’input’事件和Quill的根元素innerHTML,赶紧试试看
小编我特意加了这段代码来观察文本改变的情况!只要有新的变化,咱们就能马上知道!然后,用着$emit这个方法,咱们就可以把编辑器的新内容告诉爸爸组件!这样一来,咱们就能够即时应对编辑器里的点点滴滴变化~
上传图片
好比想在编辑器里插图还能上传图片,那就来瞧瞧这个例子。
import axios from ‘axios’;
axios 给 ‘/upload’ 传个表单数据,然后等着看结果。
url就等于response.data里的那个网址。
在这儿,我们可以通过这个方法获取到Quill的选区——range。
把这个,用黑色笔在页面上插入图片就行。
});
好消息!上面这段代码里,我们利用input元素抓住了文件上传的小动作,然后在handleImageUpload方法里搞定文件上传的事儿。搞定这几步,我们就能把图片轻松地上传~
总结
总之,用Vue搞个在线编辑器简直太简单了!你只要选个好的开源库或者抄抄别人的例子就行。这样一来,咱们就能给用户提供更顺手、效率更高的创作空间了,让他们用的舒服自然,也能让整个APP更上一层楼。
用Vue做过在线编辑器吗?遇到啥难题了没?咱评论区聊聊,分享下你的经验和想法。
评论0