Mostrar HTML sin escape en Vue.js

191

¿Cómo puedo lograr que se interprete HTML dentro de un enlace de bigote? Por el momento, el corte ( <br />) se muestra / escapa.

Aplicación Small 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  }
    ]
  }
})

Y aquí está la plantilla:

<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>
Miguel
fuente
1
hacer HTML sin escapes para saltos de línea es excesivo, ¡solo quería mencionar eso! es un gran riesgo para la seguridad
Ryan Taylor

Respuestas:

203

Comenzando con Vue2, las llaves triples quedaron en desuso, debe usarlas v-html.

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

No está claro en el enlace de la documentación lo que se supone que debemos colocar dentro v-html, sus variables van dentro v-html.

Además, v-htmlfunciona solo con <div>o <span>pero no con<template> .

Si quieres ver esto en vivo en una aplicación, haz clic aquí .

thewhitetulip
fuente
1
"pero no con <template>" es la parte importante aquí si vienes de Angular.js y buscas algo como<ng-include>
domih
236

Puede usar la directiva v-html para mostrarlo. Me gusta esto:

<td v-html="desc"></td>
王 开朗
fuente
3
Ese realmente funciona en vue2. Primero uno compila.
Yauheni Prakopchyk
1
Tengo un problema con v-html para limitar el texto,? ¿Es posible limitar el texto en v-html? Lo intenté, fue un
error
86

Puedes leer eso aquí

Si utiliza

{{<br />}}

Se escapará. Si quieres html sin procesar, debes usar

{{{<br />}}}

EDITAR (5 de febrero de 2017): como señala @hitautodestruct, en vue 2 debe usar v-html en lugar de llaves dobles.

zeratulmdq
fuente
1
Sí, incluso en el docu. Gracias.
Mike
6060
Tenga en cuenta que en vue 2.0 el triple bigote ha quedado en desuso , debe usar v-html en su lugar.
hitautodestruct
5

Vue se envía de forma predeterminada con la directiva v-html para mostrarlo, lo vincula al elemento en lugar de usar el enlace de bigote normal para las variables de cadena.

Entonces, para su ejemplo específico, necesitaría:

<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>

fuente
4

Debe usar la directiva v-html para mostrar contenido html dentro de un componente vue

<div v-html="html content data property"></div>
Shair Haider
fuente