Wyświetl nieskalowany HTML w Vue.js

191

Jak mogę interpretować HTML w powiązaniu wąsów? W tej chwili funkcja break ( <br />) jest właśnie wyświetlana / wybierana.

Mała aplikacja 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  }
    ]
  }
})

A oto szablon:

<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>
Mikrofon
źródło
1
robienie nieskalowanego HTML-a dla łamania linii to przesada, chcę tylko o tym wspomnieć! to duże ryzyko bezpieczeństwa
Ryan Taylor

Odpowiedzi:

203

Począwszy od Vue2, potrójne nawiasy klamrowe były przestarzałe, należy ich użyć v-html.

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

Z linku dokumentacji nie jest jasne, co mamy w środku umieścić v-html, twoje zmienne wchodzą do środka v-html.

Ponadto, v-htmldziała tylko z <div>lub <span>ale nie <template>.

Jeśli chcesz zobaczyć to na żywo w aplikacji, kliknij tutaj .

thewhitetulip
źródło
1
„ale nie z <template>” jest tutaj ważną częścią, jeśli pochodzisz z Angular.js i szukasz czegoś takiego<ng-include>
domih
236

Aby to pokazać, możesz użyć dyrektywy v-html. lubię to:

<td v-html="desc"></td>
王 开朗
źródło
3
Ten faktycznie działa w vue2. Najpierw sprawdza się przy kompilacji.
Yauheni Prakopchyk
1
mam problem z v-html, aby ograniczyć tekst,? czy można ograniczyć tekst w v-html? próbowałem, to nie powiodło się
Zum Dummi
86

Możesz to przeczytać tutaj

Jeśli użyjesz

{{<br />}}

ucieknie. Jeśli chcesz surowy HTML, musisz użyć

{{{<br />}}}

EDYCJA (5 lutego 2017 r.): Jak wskazuje @hitautodestruct, w vue 2 powinieneś używać v-html zamiast potrójnych nawiasów klamrowych.

zeratulmdq
źródło
1
Tak, nawet w docu. Dzięki.
Mike
60
Pamiętaj, że w vue 2.0 potrójne wąsy zostały wycofane , zamiast tego powinieneś użyć v-html .
hitautodestruct
5

Vue domyślnie jest dostarczany z dyrektywą v-html, aby go pokazać, wiążesz go z samym elementem zamiast używać normalnego wiązania wąsów dla zmiennych łańcuchowych.

Tak więc dla twojego konkretnego przykładu potrzebujesz:

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

źródło
4

Musisz użyć dyrektywy v-html do wyświetlania treści HTML wewnątrz komponentu vue

<div v-html="html content data property"></div>
Shair Haider
źródło