Задать вопрос
tomgif
@tomgif
Веб-разработчик

Приемы рендера компонентов вместо плейсхолдеров внутри строки во Vue?

Есть строка с плейсхолдерами, которая приходит с сервера:
'lorem ipsum dolor [placeholder|1] sit amet [placeholder|2]'.

Нужен способ для рендера компонента вместо плейсхолдеров, либо любой другой способ заменить плейсхолдеры на тег с кнопкой копирования значения.
  • Вопрос задан
  • 61 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Наверное, есть более разумные решения, но попробуйте использовать динамические компоненты Vue.

Строку разбить на узлы: текстовые и компоненты. Сделать какой-то минимальный компонент для просто-текстовых кусков.

Например, из строки 'lorem ipsum dolor [placeholder|1] sit amet [placeholder|2]'
сделать массив
[
  ['text', 'lorem ipsum dolor'],
  ['copy', 1],
  ['text', 'sit amet'],
  ['copy', 2],
]
если я правильно понял, что каждый из плейсхолдеров копирует значение после вертикальной черты – первый копирует 1, второй 2.

В темплейте перебрать этот массив примерно так
<template v-for="item in items">
  <component :is="text" v-if="item[0] === 'text'">{ item[1] }</component>
  <component :is="copy" v-if="item[0] === 'copy'" :value="item[1]" />
</template>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
lina666
@lina666
Изучаю веб ЯП.
В теории можно сделать что то такое

<div v-html="serverString" class="container">
После чего в mounted
const placeholders = document.querySelector(placeholder)
placeholderComponent.mount(placholder)


В общем все тоже самое, как мы инициализируем Vue приложение изначально.

Не уверен что данный подход сработает, но пока в голове только такой вариант крутится, если получится, желательно постарайтесь избавится от v-html из за возможности XSS атак.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽