แสดง HTML ที่ไม่ใช้ค่า Escape ใน 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 ที่ไม่ใช้ค่า Escape สำหรับการขึ้นบรรทัดใหม่นั้นเกินความต้องการเพียงแค่พูดถึงสิ่งนั้น! มันมีความเสี่ยงด้านความปลอดภัยขนาดใหญ่
Ryan Taylor

คำตอบ:


203

เริ่มต้นด้วย Vue2, v-htmlวงเล็บสามถูกเลิกคุณอยู่กับการใช้งาน

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

มันก็ไม่มีความชัดเจนจากการเชื่อมโยงเอกสารเป็นสิ่งที่เราควรจะอยู่ภายในสถานที่ตัวแปรของคุณไปภายในv-htmlv-html

นอกจากนี้v-htmlจะทำงานเฉพาะกับ<div>หรือแต่ไม่ได้มี<span><template>

หากคุณต้องการดูวิดีโอสดนี้ในแอพให้คลิก ที่นี่


1
"แต่ไม่ใช่กับ<template>" เป็นส่วนสำคัญที่นี่ถ้าคุณมาจาก Angular.js และมองหาบางสิ่งบางอย่างเช่น<ng-include>
domih

236

คุณสามารถใช้คำสั่ง v-html เพื่อแสดงมัน แบบนี้:

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

3
อันนั้นใช้งานได้จริงใน vue2 แรกหนึ่ง trows ในการรวบรวม
Yauheni Prakopchyk

1
ฉันมีปัญหากับ v-html เพื่อ จำกัด ข้อความใช่ไหม เป็นไปได้ที่จะ จำกัด ข้อความใน v-html หรือไม่ ฉันพยายามมันล้มเหลว
Zum Dummi

86

คุณสามารถอ่านได้ที่นี่

ถ้าคุณใช้

{{<br />}}

มันจะถูกหลบหนี ถ้าคุณต้องการ html ดิบคุณต้องใช้

{{{<br />}}}

แก้ไข (5 ก.พ. 2017): @hitautodestruct ชี้ให้เห็นใน vue 2 คุณควรใช้v-htmlแทนวงเล็บปีกกาสามเท่า


1
ใช่มันยังอยู่ใน docu ขอบคุณ
Mike

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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.