Even though you tagged the question as a Vue 2 question, I am going to guess you are using Vue 3 because otherwise, it should work just fine (I also tried your code and fixed it on Vue 3).
You are actually facing a breaking change issue.
When you want to update your data with a v-model now, you need to use :

  • prop : value -> modelValue;
  • event : input -> update:modelValue;

Your code should look like this for 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>

Good luck with your project!

Answer from Valentin Richet on Stack Overflow
🌐
Vueup
vueup.github.io › vue-quill
VueQuill | Rich Text Editor Component for Vue 3
VueQuill is a Component for building rich text editors, powered by Vue 3 and Quill.
🌐
GitHub
github.com › vueup › vue-quill
GitHub - vueup/vue-quill: Rich Text Editor Component for Vue 3.
VueQuill is a Component for building rich text editors, powered by Vue 3 and Quill.
Starred by 1.3K users
Forked by 330 users
Languages   TypeScript 66.8% | Stylus 20.4% | JavaScript 12.8%
🌐
npm
npmjs.com › package › vue3-quill
vue3-quill - npm
Quill editor for vue3. Latest version: 0.3.1, last published: 2 years ago. Start using vue3-quill in your project by running `npm i vue3-quill`. There are 136 other projects in the npm registry using vue3-quill.
      » npm install vue3-quill
    
Published   Sep 22, 2023
Version   0.3.1
🌐
Made with Vue.js
madewithvuejs.com › vuequill
VueQuill - Rich Text Editor Component - Made with Vue.js
October 19, 2022 - "VueQuill is a component for building rich text editors, powered by Vue 3, TypeScript and Quill, a modern rich text editor built for compatibility and extensibility."
🌐
npm
npmjs.com › package › @vueup › vue-quill
@vueup/vue-quill - npm
Vue 3 rich text editor based on Quill.. Latest version: 1.2.0, last published: 3 years ago. Start using @vueup/vue-quill in your project by running `npm i @vueup/vue-quill`. There are 153 other projects in the npm registry using @vueup/vue-quill.
      » npm install @vueup/vue-quill
    
Published   May 12, 2023
Version   1.2.0
Author   Ahmad Luthfi Masruri
🌐
GitHub
github.com › surmon-china › vue-quill-editor
GitHub - surmon-china/vue-quill-editor: @quilljs editor component for @vuejs(2)
Quill editor component for Vue(2).
Starred by 7.4K users
Forked by 1K users
Languages   JavaScript 90.7% | Vue 9.3%
🌐
npm
npmjs.com › package › vue-quill-editor
vue-quill-editor - npm
Quill editor component for Vue. Latest version: 3.0.6, last published: 8 years ago. Start using vue-quill-editor in your project by running `npm i vue-quill-editor`. There are 884 other projects in the npm registry using vue-quill-editor.
      » npm install vue-quill-editor
    
Published   Apr 09, 2018
Version   3.0.6
Author   Surmon
Find elsewhere
🌐
npm
npmjs.com › package › vue-quill
vue-quill - npm
Vue quill component and filter. Latest version: 1.5.1, last published: 7 years ago. Start using vue-quill in your project by running `npm i vue-quill`. There are 1 other projects in the npm registry using vue-quill.
      » npm install vue-quill
    
Published   Feb 19, 2019
Version   1.5.1
Author   Brock Reece
🌐
Vueup
vueup.github.io › vue-quill › guide › installation.html
Installation | VueQuill
VueQuill ships as a UMD module that is accessible in the browser. When loaded in the browser, you can access the component through the VueQuill.QuillEditor global variable.
Top answer
1 of 2
1

The way we solved this by only using the official package is:

<div
   id="text-editor"
   ref="textEditorEl"
   class="text-editor__editor"
/>

Then we use composition api, but im sure option api is the same concept:

Add a field for the quill editor let textEditorEl = null

Add a onMounted, in which you add a nextTick, to be sure the ref is ready.

Add a

    quillEditor = new Quill(textEditorEl.value || '#text-editor', {
                modules: {
                    toolbar: true,
                },
                theme: 'snow',
            });

Ofcourse this is just the basics, styling etc is custom for our application so cant help you with that. Good luck!

2 of 2
0

You could use this tiny wrapper component: https://github.com/alekswebnet/vue-quilly

Then you can create your custom editor. Basic setup:

npm add [email protected] vue-quilly
# Or
pnpm add [email protected] vue-quilly
import 'quill/dist/quill.core.css' // Required
import 'quill/dist/quill.snow.css' // For snow theme (optional)
import 'quill/dist/quill.bubble.css' // For bubble theme (optional)

Define Quill options:

const options = {
  theme: 'snow', // If you need Quill theme
  modules: {
    toolbar: true,
  },
  placeholder: 'Compose an epic...',
  readOnly: false
}

Initialize the editor:

const editor = ref<InstanceType<typeof QuillyEditor>>()
const model = ref<string>('<p>Hello Quilly!</p>')
// Quill instance
let quill: Quill | null = null
onMounted(() => {
  quill = editor.value?.initialize(Quill)!
})
<QuillyEditor
  ref="editor"
  v-model="model"
  :options="options"
  @text-change="({ delta, oldContent, source }) => console.log('text-change', delta, oldContent, source)"
  @selection-change="({ range, oldRange, source }) => console.log('selection-change', range, oldRange, source)"
  @editor-change="(eventName) => console.log('editor-change', `eventName: ${eventName}`)"
  @focus="(quill) => console.log('focus', quill)"
  @blur="(quill) => console.log('blur', quill)"
  @ready="(quill) => console.log('ready', quill)"
/>
🌐
Medium
ogunmefun-anjolaoluwa.medium.com › using-vuequill-editor-in-vue-js-3-9b02e162235e
Using VueQuill editor in Vue.Js 3 | by Ogunmefun Anjolaoluwa | Medium
April 25, 2022 - It provides cross-platform usage- ... both mobile and web. It is super easy to use. is a Vue component used to create a text editor powered by Vue 3 and Quill....
🌐
CodeSandbox
codesandbox.io › examples › package › vue-quill-editor
vue-quill-editor examples - CodeSandbox
Use this online vue-quill-editor playground to view and fork vue-quill-editor example apps and templates on CodeSandbox.
Top answer
1 of 2
1

(The text was too long for a comment)

Visit the repository - in it's readme you find the answer:

https://github.com/surmon-china/vue-quill-editor

Unfortunately, since the Quill project has effectively stopped being maintained, vue-quill-editor will be DEPRECATED and will no longer support Vue3; if you're looking for a rich text editor, I recommend migrating to tiptap, which is a much better alternative.

So using the editor you want is no longer supported for Vue3. Even if you get it working, it seems switching to another rich text editor is in order.

As suggested, try tiptap:
https://tiptap.dev/installation/vue3

2 of 2
0

2024: If you need a wrapper for Vue 3, take a look at vue-quilly library. It uses recently released Quill 2:

npm add [email protected] vue-quilly
# Or
pnpm add [email protected] vue-quilly

Import Quill full build if you need all modules or core build with minimum required modules:

import Quill from 'quill' // Full build
import Quill from 'quill/core' // Core build
import { QuillyEditor } from 'vue-quilly'

Add core styles. Also import one of Quill's themes, if you need one:

import 'quill/dist/quill.core.css' // Required
import 'quill/dist/quill.snow.css' // For snow theme (optional)
import 'quill/dist/quill.bubble.css' // For bubble theme (optional)

Define Quill options:

const options = {
  theme: 'snow', // If you need Quill theme
  modules: {
    toolbar: true,
  },
  placeholder: 'Compose an epic...',
  readOnly: false
}

Initialize the editor:

const editor = ref<InstanceType<typeof QuillyEditor>>()
const model = ref<string>('<p>Hello Quilly!</p>')
// Quill instance
let quill: Quill | null = null
onMounted(() => {
  quill = editor.value?.initialize(Quill)!
})
<QuillyEditor
  ref="editor"
  v-model="model"
  :options="options"
  @text-change="({ delta, oldContent, source }) => console.log('text-change', delta, oldContent, source)"
  @selection-change="({ range, oldRange, source }) => console.log('selection-change', range, oldRange, source)"
  @editor-change="(eventName) => console.log('editor-change', `eventName: ${eventName}`)"
  @focus="(quill) => console.log('focus', quill)"
  @blur="(quill) => console.log('blur', quill)"
  @ready="(quill) => console.log('ready', quill)"
/>

After this you can add you own styles right inside your Vue component:

<style>
.ql-toolbar.ql-snow {
  border: 1px solid blue;
  padding: 20px;
}
<style>

https://github.com/alekswebnet/vue-quilly

🌐
Vueup
vueup.github.io › vue-quill › guide › modules.html
Modules | VueQuill
VueQuill · SearchK · Appearance · Menu · Return to top · On this page · Modules allow Quill’s behavior and functionality to be customized. To enable a module, simply include it in a modules prop. In this example I am gonna use quill-blot-formatter, a module for resizing and realigning images and iframe video.
🌐
Reddit
reddit.com › r/vuejs › which vue editor library, quill, tiptap or lexical?
r/vuejs on Reddit: Which VUE Editor Library, Quill, TipTap or Lexical?
April 12, 2024 -

In this video (https://www.youtube.com/watch?v=VRKSA4ijo8U), I talk about our journey of choosing a JS library for our app.

The implementation was for Superthread which is an all-in-one project management software and wiki for small teams.

Since the editor is used throughout the app: e.g. pages, cards, comments etc.

it was very important for it to be crafted immaculately.

It was a choice between Quill, TipTap or Lexical.

I hope some of you find it useful.

🌐
DEV Community
dev.to › anjolaogunmefun › using-vuequill-editor-in-vue-js3-1cpd
Using VueQuill editor in Vue.Js3 - DEV Community
July 28, 2021 - It provides cross-platform usage- ... both mobile and web. It is super easy to use. is a Vue component used to create a text editor powered by Vue 3 and Quill....