Відображати несказований HTML у Vue.js


191

Як мені вдається інтерпретувати HTML всередині вуса? На даний момент перерва ( <br />) просто відображається / уникається.

Малий додаток Vue:

var logapp = new Vue({
  el: '#logapp',
  data: {
    title: 'Logs',
    logs: [
      { status: true, type: 'Import', desc: 'Learn<br />JavaScript', date: '11.11.2015', id: 1  },
      { status: true, type: 'Import', desc: 'Learn<br />JavaScript', date: '11.11.2015', id: 1  }
    ]
  }
})

І ось шаблон:

<div id="logapp">    
    <table>
        <tbody>
            <tr v-repeat="logs">
                <td>{{fail}}</td>
                <td>{{type}}</td>
                <td>{{description}}</td>
                <td>{{stamp}}</td>
                <td>{{id}}</td>
            </tr>
        </tbody>
    </table>
</div>

1
робити несказаний HTML для розривів рядків надмірно, просто хотілося це згадати! це великий ризик для безпеки
Райан Тейлор

Відповіді:


203

Починаючи з Vue2, потрійні брекети застаріли, ви повинні використовувати v-html.

<div v-html="task.html_content"> </div>

З посилання на документацію незрозуміло, що ми маємо розмістити всередині v-html, ваші змінні знаходяться всередині v-html.

Крім того , v-htmlпрацює тільки з <div>або , <span>але не з <template>.

Якщо ви хочете бачити це в прямому ефірі в додатку, натисніть тут .


1
<template>Тут важлива частина "але не з ", якщо ви приїхали з Angular.js і шукаєте щось на кшталт<ng-include>
domih

236

Ви можете використовувати директиву v-html, щоб показати її. подобається це:

<td v-html="desc"></td>

3
Цей фактично працює у vue2. Спочатку кидаєш на компіляцію.
Яухені Пракопчик

1
У мене є проблема з v-html, щоб обмежити текст,? чи можливо обмежити текст у v-html? я спробував, не вдалося
Zum Dummi

86

Ви можете прочитати це тут

Якщо ви використовуєте

{{<br />}}

це втече. Якщо ви хочете сирий html, ви повинні використовувати

{{{<br />}}}

EDIT (5 лютого 2017 р.): Як вказує @hitautodestruct, у Vue 2 слід використовувати v-html замість потрійних фігурних дужок.


1
Так, це навіть у документі. Дякую.
Майк

60
Зауважте, що в vue 2.0 потрійні вуса застарілі, замість цього слід використовувати v-html .
hitautodestruct

5

Vue за замовчуванням постачається з директивою v-html, щоб показати його, ви прив'язуєте його до самого елемента, а не використовуючи звичайне прив'язування вусів для змінних рядків.

Отже, для вашого конкретного прикладу вам знадобиться:

<div id="logapp">    
    <table>
        <tbody>
            <tr v-repeat="logs">
                <td v-html="fail"></td>
                <td v-html="type"></td>
                <td v-html="description"></td>
                <td v-html="stamp"></td>
                <td v-html="id"></td>
            </tr>
        </tbody>
    </table>
</div>

4

Ви повинні використовувати v-html директиву для відображення вмісту html всередині компонента vue

<div v-html="html content data property"></div>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.