Vue.jsでエスケープされていないHTMLを表示する


189

moustacheバインディング内でHTMLを解釈させるにはどうすればよいですか?現時点では休憩(<br />)は表示/エスケープされています。

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

そして、これがテンプレートです:

<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を実行するのはやりすぎです。これは大きなセキュリティリスクです
ライアンテイラー

回答:


201

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

235

ディレクティブv-htmlを使用して表示できます。このような:

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

3
それは実際にはvue2で動作します。最初はコンパイル時にトローします。
Yauheni Prakopchyk 2016

1
テキストを制限するv-htmlに問題がありますか?v-htmlのテキストを制限することは可能ですか?試してみましたが、失敗しました
Zum Dummi

86

あなたはそれをここで読むことができます

使用する場合

{{<br />}}

エスケープされます。未加工のHTMLが必要な場合は、使用する必要があります

{{{<br />}}}

編集(2017年2月5日):@hitautodestructが指摘するように、vue 2では次を使用する必要がありますでは、中括弧の代わりに v-htmlます。


1
ええ、それはドキュメントでもです。ありがとう。
マイク

60
vue 2.0ではトリプル口ひげが廃止されていることに注意してください。代わりにv-html使用してください。
hitautodestruct

5

デフォルトでは、Vueにはそれを表示するv-htmlディレクティブが付属しており、文字列変数に通常のmoustacheバインディングを使用するのではなく、要素自体にバインドします。

したがって、具体的な例では次のものが必要になります。

<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

vueコンポーネント内にhtmlコンテンツを表示するには、v-htmlディレクティブを使用する必要があります

<div v-html="html content data property"></div>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.