Nuxt Nation 大会即将到来。加入我们,时间为 11 月 12-13 日。

tiptap
nuxt-tiptap-editor

快速将 TipTap 编辑器集成到您的 Nuxt 应用中的必要条件

Nuxt TipTap 编辑器

npm version npm downloads License Nuxt

立即将具有基本功能的 TipTap 编辑器 添加到您的 Nuxt 3 应用中。

Tiptap Editor Preview


快速设置

  1. nuxt-tiptap-editor 依赖项添加到您的项目中
    npx nuxi@latest module add tiptap
    
  2. nuxt-tiptap-editor 添加到 nuxt.config.ts 文件的 modules 部分
    export default defineNuxtConfig({
      modules: ['nuxt-tiptap-editor'],
      tiptap: {
        prefix: 'Tiptap', //prefix for Tiptap imports, composables not included
      },
    });
    
  3. 您可以使用此文件的内容作为参考。
    将代码复制到您自己的 components/TiptapEditor.vue 文件中。
    任何路径都可以,只要它在 components 目录下且扩展名为 .vue 即可。
    <template>
      <div>
        <div v-if="editor">
          <button
            @click="editor.chain().focus().toggleBold().run()"
            :disabled="!editor.can().chain().focus().toggleBold().run()"
            :class="{ 'is-active': editor.isActive('bold') }"
          >
            bold
          </button>
          <button
            @click="editor.chain().focus().toggleItalic().run()"
            :disabled="!editor.can().chain().focus().toggleItalic().run()"
            :class="{ 'is-active': editor.isActive('italic') }"
          >
            italic
          </button>
          <button
            @click="editor.chain().focus().toggleStrike().run()"
            :disabled="!editor.can().chain().focus().toggleStrike().run()"
            :class="{ 'is-active': editor.isActive('strike') }"
          >
            strike
          </button>
          <button
            @click="editor.chain().focus().toggleCode().run()"
            :disabled="!editor.can().chain().focus().toggleCode().run()"
            :class="{ 'is-active': editor.isActive('code') }"
          >
            code
          </button>
          <button @click="editor.chain().focus().unsetAllMarks().run()">
            clear marks
          </button>
          <button @click="editor.chain().focus().clearNodes().run()">
            clear nodes
          </button>
          <button
            @click="editor.chain().focus().setParagraph().run()"
            :class="{ 'is-active': editor.isActive('paragraph') }"
          >
            paragraph
          </button>
          <button
            @click="editor.chain().focus().toggleHeading({ level: 1 }).run()"
            :class="{ 'is-active': editor.isActive('heading', { level: 1 }) }"
          >
            h1
          </button>
          <button
            @click="editor.chain().focus().toggleHeading({ level: 2 }).run()"
            :class="{ 'is-active': editor.isActive('heading', { level: 2 }) }"
          >
            h2
          </button>
          <button
            @click="editor.chain().focus().toggleHeading({ level: 3 }).run()"
            :class="{ 'is-active': editor.isActive('heading', { level: 3 }) }"
          >
            h3
          </button>
          <button
            @click="editor.chain().focus().toggleHeading({ level: 4 }).run()"
            :class="{ 'is-active': editor.isActive('heading', { level: 4 }) }"
          >
            h4
          </button>
          <button
            @click="editor.chain().focus().toggleHeading({ level: 5 }).run()"
            :class="{ 'is-active': editor.isActive('heading', { level: 5 }) }"
          >
            h5
          </button>
          <button
            @click="editor.chain().focus().toggleHeading({ level: 6 }).run()"
            :class="{ 'is-active': editor.isActive('heading', { level: 6 }) }"
          >
            h6
          </button>
          <button
            @click="editor.chain().focus().toggleBulletList().run()"
            :class="{ 'is-active': editor.isActive('bulletList') }"
          >
            bullet list
          </button>
          <button
            @click="editor.chain().focus().toggleOrderedList().run()"
            :class="{ 'is-active': editor.isActive('orderedList') }"
          >
            ordered list
          </button>
          <button
            @click="editor.chain().focus().toggleCodeBlock().run()"
            :class="{ 'is-active': editor.isActive('codeBlock') }"
          >
            code block
          </button>
          <button
            @click="editor.chain().focus().toggleBlockquote().run()"
            :class="{ 'is-active': editor.isActive('blockquote') }"
          >
            blockquote
          </button>
          <button @click="editor.chain().focus().setHorizontalRule().run()">
            horizontal rule
          </button>
          <button @click="editor.chain().focus().setHardBreak().run()">
            hard break
          </button>
          <button
            @click="editor.chain().focus().undo().run()"
            :disabled="!editor.can().chain().focus().undo().run()"
          >
            undo
          </button>
          <button
            @click="editor.chain().focus().redo().run()"
            :disabled="!editor.can().chain().focus().redo().run()"
          >
            redo
          </button>
        </div>
        <TiptapEditorContent :editor="editor" />
      </div>
    </template>
    
    <script setup>
    const editor = useEditor({
      content: "<p>I'm running Tiptap with Vue.js. 🎉</p>",
      extensions: [TiptapStarterKit],
    });
    
    onBeforeUnmount(() => {
      unref(editor).destroy();
    });
    </script>
    
  4. 现在编辑 HTML,用您提供的 UI 组件替换 button,或使用 Tailwind 或您正在使用的任何 CSS 对其进行样式设置,添加图标或文本,修改活动状态类,验证暗模式等。

就是这样!您现在可以在您的 Nuxt 应用中使用 Nuxt TipTap 编辑器 ✨

开发

# Install dependencies
yarn install

# Generate type stubs
yarn dev:prepare

# Develop with the playground
yarn dev

# Build the playground
yarn build

# Run ESLint
yarn lint

# Run Vitest
yarn test
yarn test:watch

# Release new version - needs to be with npm for login to work
npm run release

贡献

请随时发送任何有效的拉取请求。非常乐意获得任何帮助!