🏠 ホーム
フロントエンド
PHP
Go言語
プログラミングの理解
プログラマーへの道
Google API

Vue.js と Quill.js を組み合わせてエディタを構築する方法

  プログラミング >     フロントエンド >  

今回は、Vue 3 の <script setup> 構文を使用して、Quill.js を活用したリッチテキストエディタの実装方法を解説します。この記事では、Quill.js の初期化、Vue のデータとの同期、およびテキストデータの投稿処理までを具体的なコード例を交えて説明します。


Quill.jsとは?

Quill.js は、シンプルかつパワフルなリッチテキストエディタです。カスタマイズ性が高く、ツールバーやテーマを簡単に設定できるため、Vueや他のフレームワークと組み合わせることで、簡単にリッチテキストエディタを構築できます。


今回の課題

以下の要件を満たすリッチテキストエディタを構築します:

  1. Quill.jsの初期化
    • Vueのライフサイクルに合わせてエディタを初期化する。
  2. データのバインディング
    • Vueデータモデル(channel.channelDescription)とエディタの内容を適切に連携。
  3. 投稿処理
    • 投稿時にQuillエディタの内容を取得してサーバーに送信する。
  4. 効率的な設計
    • 不要な watch を避け、データ取得後にエディタを初期化する。

完成したコード例

以下が最終的なコード例です。

テンプレート部分

まず、Quillエディタとツールバーを含むテンプレートを構築します。

<template>
  <div class="form-container">
    <!-- チャンネル名 -->
    <input type="text" v-model="channel.channelName" placeholder="グループ名" class="name" />

    <!-- Quillツールバー -->
    <div class="editLeft" id="toolbar">
      <button class="ql-bold"></button>
      <button class="ql-strike"></button>
      <button class="ql-blockquote"></button>
      <button class="ql-code-block"></button>
      <button class="ql-link"></button>
      <select class="ql-color">
        <option value="red">Red</option>
        <option value=""></option>
      </select>
    </div>

    <!-- Quillエディタ -->
    <div id="description"></div><br>

    <!-- 投稿ボタン -->
    <button @click="postContent">投稿する</button>
  </div>
</template>

スクリプト部分(script setup

<script setup> を使って効率的にロジックを記述します。

<script setup>
import { ref, onMounted } from 'vue';
import Quill from 'quill';
import 'quill/dist/quill.snow.css';

// 必要なデータを定義
const fetched = ref(false); // データ取得状態
const channel = ref({
  channelName: '',
  channelDescription: '' // チャンネルの説明文
});

const quill = ref(null); // Quillインスタンス

// Quill初期化関数
function initQuill() {
  // Quillエディタのインスタンス作成
  quill.value = new Quill('#description', {
    modules: {
      toolbar: '#toolbar', // ツールバーを設定
    },
    theme: 'snow' // Quillテーマ
  });

  // Vueデータモデルの初期値をQuillに設定
  quill.value.root.innerHTML = channel.value.channelDescription;
}

// 投稿ボタンをクリックした際にQuillエディタの内容を取得
function postContent() {
  const content = quill.value.root.innerHTML; // Quillエディタの内容を取得
  console.log('投稿内容:', content);

  // サーバーに送信する処理をここに記述
  // 例: await axios.post('/api/content', { description: content });
}

// コンポーネントがマウントされた時の処理
onMounted(async () => {
  // データを取得する関数(例: APIから取得)
  await fetchAllChannel();
  if (props.id) {
    channel.value = channels.value.find(d => d.channelID === props.id);
  }

  // 必要なプロパティをセット
  channel.value.channelDescription = '既存の説明文をここにセットします';

  // データ取得後にQuillを初期化
  fetched.value = true;
  initQuill();
});
</script>

動作フロー

1. 初期化

2. Quillエディタの初期化

3. 投稿処理


重要なポイント

1. watchを不要にする

2. Quillの内部HTMLを直接操作

3. 投稿時のデータ取得


成果物の動作例


まとめ

この記事では、Vue.js と Quill.js を使って効率的にリッチテキストエディタを構築する方法を紹介しました。

ポイント

これにより、Vueアプリケーションにカスタマイズ可能なリッチテキストエディタを簡単に導入できます。ぜひプロジェクトに取り入れてみてください!🎉


💡 次のステップ

登録日:

更新日:

by

コメント         tweetでコメント