#vue.js #vuetify.js #tiptap
Вопрос:
Фон
Я использую tiptap-vuetify для реализации пользовательского интерфейса сообщений/чатов, в котором пользователи видят редактируемый экземпляр Tiptap для создания новых сообщений, а также несколько неотредактируемых экземпляров Tiptap (по одному для каждого уже отправленного сообщения в потоке, который просматривает пользователь).
У меня есть выходные данные редактируемого экземпляра в формате JSON, которые я храню в своей базе данных в поле JSONB.
Проблема
Когда я загружаю JSON для отправленных сообщений из базы данных, отображаются только текстовые сообщения; если я применил какой-либо стиль (полужирный, курсив, списки и т.д.), Вообще ничего не отображается.
Код, который я использую для неотредактируемых экземпляров Tiptap, выглядит следующим образом:
<tiptap-vuetify
v-model="message.content"
:editor-properties="{ editable: false }"
output-format="json"
/>
Вот скриншот message
объекта (и message.content
) для примера «полужирного asdf» выше:
Ответ №1:
Когда я просматривал документацию -> >Начало работы, я увидел, что содержимое является HTML. Как это обычно бывает внутри любого наконечника.
Ваши данные контента-это объект с большим количеством вложенных данных. Я не думаю, что плагин/компонент может обрабатывать формат такого типа.
Попробуйте сохранить свои данные в формате HTML на свой .json, а также для получения данных в виде HTML из вашего .json.
Пример:
{
messages: [
{
"id": 1,
"content": "<p>foo bar</p>"
},
{
"id": 2,
"content": "<p>hello world</p>"
},
]
}
(Новичок, отвечающий на вопросы о stackoverflow)
Комментарии:
1. Спасибо за ответ, но если вы посмотрите документацию Tiptap, кажется, что в ней говорится, что предоставление JSON в качестве содержимого должно работать: tiptap.dev/api/команды/набор содержимого «Команда setContent заменяет документ новым. Вы можете передать JSON или HTML, оба работают нормально. Это в основном то же самое, что настроить содержимое при инициализации».
Ответ №2:
Я придумал, как это исправить:
- Я не понимал, что мне нужно включить
:extensions
поддержку всех функций HTML, которые я хотел использовать (полужирный шрифт, курсив и т.д.) В редакторе, который будет отображать HTML. Я думал, что эти расширения использовались только для добавления кнопок панели инструментов, но они также используются для визуализации JSON, создаваемого этими кнопками. - Чтобы затем скрыть панель инструментов, я просто использовал пример кода панели инструментов-слота из readme, и панель инструментов исчезла.
Вот рабочий код:
<tiptap-vuetify
v-model="message.content"
:extensions="extensions"
:editor-properties="{ editable: false }"
>
<template #toolbar="{ buttons }">
<pre>{{ buttons }}</pre>
</template>
</tiptap-vuetify>