การใช้งานพื้นฐาน
การผูกเนื้อหา
ใช้ v-model เพื่อซิงก์เนื้อหา:
vue
<script setup lang="ts">
import { ref } from 'vue'
const content = ref('<p>Hello, <strong>world</strong>!</p>')
</script>
<template>
<Tiptapify
v-model="content"
placeholder="Write something..."
:bubble-menu="true"
:floating-menu="false"
:slash-commands="true"
/>
</template>การรับฟังการเปลี่ยนแปลง
ใช้อีเวนต์ content-changed เพื่อตอบสนองต่อการเปลี่ยนแปลงของเอดิเตอร์:
vue
<script setup lang="ts">
import { ref } from 'vue'
const wordCount = ref(0)
const onContentChanged = ({ html, json }) => {
const text = html.replace(/<[^>]*>/g, ' ')
wordCount.value = text.trim().split(/\s+/).filter(Boolean).length
}
</script>
<template>
<div>
<Tiptapify
:content="'<p>Start writing...</p>'"
placeholder="Write something..."
:bubble-menu="true"
:floating-menu="false"
:slash-commands="true"
@content-changed="onContentChanged"
/>
<p>Words: {{ wordCount }}</p>
</div>
</template>คอลแบ็กเมื่อเอดิเตอร์พร้อม
เข้าถึงอินสแตนซ์ Tiptap Editor ตัวจริง:
vue
<script setup lang="ts">
const onEditorReady = (options) => {
const { editor, getHTML, getJSON } = options
// Focus the editor programmatically
editor.commands.focus()
// Set content programmatically
editor.commands.setContent('<p>New content</p>')
// Check editor state
console.log('Is focused:', editor.isFocused)
console.log('HTML:', getHTML())
console.log('JSON:', getJSON())
}
</script>
<template>
<Tiptapify
placeholder="Editor with ready callback..."
:bubble-menu="true"
:floating-menu="false"
:slash-commands="true"
@editor-ready="onEditorReady"
/>
</template>เอดิเตอร์ความสูงคงที่
กำหนดความสูงขั้นต่ำของพื้นที่เอดิเตอร์:
vue
<template>
<Tiptapify
:content="'<p>Content area with fixed height...</p>'"
:height="400"
placeholder="This editor has a fixed height of 400px..."
:bubble-menu="true"
:floating-menu="false"
:slash-commands="true"
/>
</template>ไม่มีแถบเครื่องมือ
ซ่อนแถบเครื่องมือทั้งหมดและใช้เฉพาะ bubble menu:
vue
<template>
<Tiptapify
:toolbar="false"
:bubble-menu="true"
placeholder="Toolbar hidden, use bubble menu..."
:floating-menu="false"
:slash-commands="true"
/>
</template>โหมดอ่านอย่างเดียว
ควบคุมการแก้ไขได้ผ่านอินสแตนซ์ของเอดิเตอร์:
vue
<script setup lang="ts">
import { ref } from 'vue'
const isReadOnly = ref(false)
const onEditorReady = (options) => {
// Set read-only after editor is ready
options.editor.setEditable(false)
}
</script>
<template>
<div>
<v-btn @click="isReadOnly = !isReadOnly">
Toggle Read-Only
</v-btn>
<Tiptapify
:content="'<p>Try editing this content...</p>'"
:toolbar="false"
:bubble-menu="true"
:floating-menu="false"
:slash-commands="true"
@editor-ready="onEditorReady"
/>
</div>
</template>