Разобрать строку с компонентами внутри шаблона в vue. js - PullRequest
1 голос
/ 23 января 2020

Возможно ли проанализировать строку с компонентами внутри шаблона в vue. js? Пример строки:

"Some text, some <b>bold text</b>, and inserted image from this 
component <vue-simple-image :src='images/my_image_name.png' />, another text and html tags."

Похоже, мне нужно сохранить такие строки в базе данных, чтобы позже использовать их для воссоздания пользовательского ввода из vue -wysiwyg editor.

Ответы [ 2 ]

1 голос
/ 23 января 2020

В строгом смысле вы задали вопрос, я не думаю, что это возможно. Существует директива v- html , которая может отображать html для вас, но не для компонентов. Это также считается анти-паттерном, так как руководство vue гласит:

Динамический рендеринг произвольного HTML на вашем сайте может быть очень опасным, поскольку может легко привести к атакам XSS. Используйте только v- html для доверенного содержимого и никогда не для пользовательского содержимого.

Вы можете просмотреть dynamici c компоненты , чтобы отобразить vue компоненты на основе пользовательского ввода. Вы можете проанализировать пользовательский ввод wysiwyg, разбить строку на распознанные vue -компонентные теги (таким образом, у вас есть массив элементов с последовательностями регулярных html и элементов, которые являются одиночными vue -компонентами), а затем используйте шаблон с циклом v-for, чтобы отобразить это. (нерабочий псевдокод) пример:

<div id="renderedWysiwygInput">
  <div v-for="elem in splitInput">
   <component v-if="stringIsVueComponent(element)" v-bind:is="element"></component>
   <div v-else v-html="element"></div>
  </div>
</div>

Вам нужно будет еще немного поработать с этим примером, чтобы учесть возможность ввода внутри самих компонентов vue, например, если вы заполнение слотов. Я бы постарался ограничить тип вводимых вами данных, чтобы он был управляемым.

0 голосов
/ 23 января 2020

Нет, это невозможно, потому что компонент Vue - это не просто элемент html, это класс js. Так что нужно правильно его зарегистрировать и так далее ...

...