Zeigen Sie nicht entkoppeltes HTML in Vue.js an


188

Wie kann ich es schaffen, HTML in einer Schnurrbartbindung zu interpretieren? Im Moment wird die break ( <br />) nur angezeigt / maskiert.

Kleine Vue App:

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  }
    ]
  }
})

Und hier ist die Vorlage:

<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
Uncaped HTML für Zeilenumbrüche zu machen ist übertrieben, wollte das nur erwähnen! Es ist ein großes Sicherheitsrisiko
Ryan Taylor

Antworten:


200

Beginnend mit Vue2 waren die dreifachen Klammern veraltet, die Sie verwenden sollen v-html.

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

Aus dem Dokumentationslink geht nicht hervor , was wir darin platzieren v-htmlsollen. Ihre Variablen gehen hinein v-html.

Funktioniert auch v-htmlnur mit <div>oder <span>aber nicht mit <template>.

Wenn Sie dies live in einer App sehen möchten, klicken Sie hier .


1
"aber nicht mit <template>" ist hier der wichtige Teil, wenn Sie von Angular.js kommen und nach etwas suchen wie<ng-include>
domih

235

Sie können die Direktive v-html verwenden, um es anzuzeigen. so was:

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

3
Das funktioniert tatsächlich in vue2. Zuerst geht man beim Kompilieren.
Yauheni Prakopchyk

1
Ich habe ein Problem mit V-HTML, um den Text einzuschränken. Ist es möglich, Text in v-html einzuschränken? Ich habe versucht, es war fehlgeschlagen
Zum Dummi

86

Das können Sie hier lesen

Wenn du benutzt

{{<br />}}

es wird entkommen. Wenn Sie rohes HTML wollen, müssen Sie verwenden

{{{<br />}}}

BEARBEITEN (5. Februar 2017): Wie @hitautodestruct hervorhebt, sollten Sie in Version 2 v-html anstelle von dreifach geschweiften Klammern verwenden.


1
Ja, es ist sogar in der Dokumentation. Vielen Dank.
Mike

60
Bitte beachten Sie, dass in Version 2.0 der dreifache Schnurrbart veraltet ist. Verwenden Sie stattdessen v-html .
Hitautodestruct

5

Vue wird standardmäßig mit der v-html-Direktive geliefert, um es anzuzeigen. Sie binden es an das Element selbst, anstatt die normale Schnurrbartbindung für Zeichenfolgenvariablen zu verwenden.

Für Ihr spezielles Beispiel benötigen Sie also:

<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

Sie müssen die v-html-Direktive verwenden, um HTML-Inhalte in einer vue-Komponente anzuzeigen

<div v-html="html content data property"></div>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.