如何使用 Quill 文本编辑器作为 Vue.js 中的一个组件
How to use Quill text editor as a component in Vue.js
我在 vue 中将 quill 文本编辑器创建为一个组件,您可以在此处看到:
<template>
<div ref="editor"></div>
</template>
<script>
import Quill from 'quill';
import 'quill/dist/quill.core.css';
import 'quill/dist/quill.bubble.css';
import 'quill/dist/quill.snow.css';
export default {
props: {
value: {
type: String,
default: ''
}
},
data() {
return {
editor: null
};
},
mounted() {
var _this = this;
this.editor = new Quill(this.$refs.editor, {
modules: {
toolbar: [[{
header: [1, 2, 3, 4, false]
}], ['bold', 'italic', 'underline', 'link']]
},
//theme: 'bubble',
theme: 'snow',
formats: ['bold', 'underline', 'header', 'italic', 'link'],
placeholder: "Type something in here!"
});
this.editor.root.innerHTML = this.value;
this.editor.on('text-change', function () {
return _this.update();
});
},
methods: {
update: function update() {
this.$emit('input', this.editor.getText() ? this.editor.root.innerHTML : '');
}
},
}
</script>
所以它是一个基本的quill组件,我使用的是quill 1.3.7。对于文档:https://quilljs.com/
所以在父组件中我创建了v-model来查看这个组件的结果:
<text-editor
v-model="model"/>
<p> <span v-html="model"></span></p>
但不幸的是,我没有收到任何回复,也没有任何错误。你认为我做错了什么?
即使您将问题标记为 Vue 2 问题,我猜您正在使用 Vue 3,否则,它应该工作得很好(我也试过你的代码并在 Vue 3 上修复了它)。
你实际上面对的是 breaking change issue.
当你现在想用 v-model 更新你的数据时,你需要使用 :
- prop : 值 -> 模型值;
- 事件: 输入 -> update:modelValue;
对于 Vue 3,您的代码应该如下所示:
<template>
<div ref="editor"></div>
</template>
<script>
import Quill from "quill";
import "quill/dist/quill.core.css";
import "quill/dist/quill.bubble.css";
import "quill/dist/quill.snow.css";
export default {
props: {
modelValue: {
type: String,
default: "",
},
},
data() {
return {
editor: null,
};
},
mounted() {
var _this = this;
this.editor = new Quill(this.$refs.editor, {
modules: {
toolbar: [
[
{
header: [1, 2, 3, 4, false],
},
],
["bold", "italic", "underline", "link"],
],
},
//theme: 'bubble',
theme: "snow",
formats: ["bold", "underline", "header", "italic", "link"],
placeholder: "Type something in here!",
});
this.editor.root.innerHTML = this.modelValue;
this.editor.on("text-change", function () {
return _this.update();
});
},
methods: {
update: function update() {
this.$emit(
"update:modelValue",
this.editor.getText() ? this.editor.root.innerHTML : ""
);
},
},
};
</script>
祝你项目顺利!
我在 vue 中将 quill 文本编辑器创建为一个组件,您可以在此处看到:
<template>
<div ref="editor"></div>
</template>
<script>
import Quill from 'quill';
import 'quill/dist/quill.core.css';
import 'quill/dist/quill.bubble.css';
import 'quill/dist/quill.snow.css';
export default {
props: {
value: {
type: String,
default: ''
}
},
data() {
return {
editor: null
};
},
mounted() {
var _this = this;
this.editor = new Quill(this.$refs.editor, {
modules: {
toolbar: [[{
header: [1, 2, 3, 4, false]
}], ['bold', 'italic', 'underline', 'link']]
},
//theme: 'bubble',
theme: 'snow',
formats: ['bold', 'underline', 'header', 'italic', 'link'],
placeholder: "Type something in here!"
});
this.editor.root.innerHTML = this.value;
this.editor.on('text-change', function () {
return _this.update();
});
},
methods: {
update: function update() {
this.$emit('input', this.editor.getText() ? this.editor.root.innerHTML : '');
}
},
}
</script>
所以它是一个基本的quill组件,我使用的是quill 1.3.7。对于文档:https://quilljs.com/
所以在父组件中我创建了v-model来查看这个组件的结果:
<text-editor
v-model="model"/>
<p> <span v-html="model"></span></p>
但不幸的是,我没有收到任何回复,也没有任何错误。你认为我做错了什么?
即使您将问题标记为 Vue 2 问题,我猜您正在使用 Vue 3,否则,它应该工作得很好(我也试过你的代码并在 Vue 3 上修复了它)。
你实际上面对的是 breaking change issue.
当你现在想用 v-model 更新你的数据时,你需要使用 :
- prop : 值 -> 模型值;
- 事件: 输入 -> update:modelValue;
对于 Vue 3,您的代码应该如下所示:
<template>
<div ref="editor"></div>
</template>
<script>
import Quill from "quill";
import "quill/dist/quill.core.css";
import "quill/dist/quill.bubble.css";
import "quill/dist/quill.snow.css";
export default {
props: {
modelValue: {
type: String,
default: "",
},
},
data() {
return {
editor: null,
};
},
mounted() {
var _this = this;
this.editor = new Quill(this.$refs.editor, {
modules: {
toolbar: [
[
{
header: [1, 2, 3, 4, false],
},
],
["bold", "italic", "underline", "link"],
],
},
//theme: 'bubble',
theme: "snow",
formats: ["bold", "underline", "header", "italic", "link"],
placeholder: "Type something in here!",
});
this.editor.root.innerHTML = this.modelValue;
this.editor.on("text-change", function () {
return _this.update();
});
},
methods: {
update: function update() {
this.$emit(
"update:modelValue",
this.editor.getText() ? this.editor.root.innerHTML : ""
);
},
},
};
</script>
祝你项目顺利!