@marsdenden

VUE.JS createElement — как использовать html entities в render-функции?

Суть в чем - создал компонент. Необходимо использовать фукнцию render, так как возможностей template не хватает (сложная логика рендеринга). Столкнулся с тем, что, когда пытаюсь через свойства передать некий текст для отображения - все нормально до тех пор, пока не использую html entities и просто html. Это в случае рендеринга по шаблону, предложенному в документации
render: function (createElement) {
  return createElement('div', {}, ['blabla']) // нормально
}

render: function (createElement) {
  return createElement('div', {}, ['blabla ']) //ненормально (для меня), прямо так и выводит
}

Чтобы вывести html, можно использовать domProps
render: function (createElement) {
  return createElement('div', {domProps:{innerHTML:'blabla '}}, []) //нормально
}

и все бы ничего, но в таком варианте полученный vnode оказывается последним - все дочерние элементы просто пропадают, то есть такая конструкция
render: function (createElement) {
  return createElement('div', {domProps:{innerHTML:'blabla '}}, [
    createElement('div', 'child div1'),
    createElement('div', 'child div2'),
  ]) 
}

не выведет два дива в корневом. Как это объехать? Чтобы и html можно было использовать и дочерние элементы не терялись? Можно, конечно, извращаться путем вложения лишних тэгов span, но хотелось бы избежать лишних элементов.
Пример здесь
  • Вопрос задан
  • 2825 просмотров
Решения вопроса 1
kleinmaximus
@kleinmaximus
Senior Full-stack Javascript Developer
Необходимо использовать фукнцию render, так как возможностей template не хватает

Я сомневаюсь, что Вы использовали прямо все возможности шаблонов, и что рендер-функция так уж необходима. Скорее всего можно декомпозировать Ваш компонент на более мелкие и тогда логика станет проще. Но, это, конечно, зависит от задачи. Может быть в Вашем случае использовании рендер-функции необходимо.

все дочерние элементы просто пропадают,

Это логично! innerHTML просто перезаписывает всё дерево детей компонента.

Можно, конечно, извращаться путем вложения лишних тэгов span

Ну, только такой вариант :) При использовании директивы v-html тоже пришлось бы оборачивать свой html-код в тег.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы