2017-05-02 85 views
3

如何讓Vue 2渲染我的組件而不轉義HTML實體並將其作爲普通文本打印?如果它是一個標籤,我會嵌套另一個createElement,但事實並非如此。Vue組件渲染函數:打印未轉義的html實體

Vue.component('my-component', { 
 
    render: function(createElement) { 
 
    return createElement('div', ' ') 
 
    } 
 
}) 
 

 
new Vue({ 
 
    el: '#app', 
 
    components: [ 
 
    'my-component' 
 
    ] 
 
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.0/vue.min.js"></script> 
 

 
<div id="app"> 
 
    <my-component /> 
 
</div>

回答

2

您可以定義DOM屬性和HTML中createElement函數的第二個參數屬性。

文檔:https://vuejs.org/v2/guide/render-function.html#The-Data-Object-In-Depth

解決方案:

Vue.component('my-component', { 
 
    render: function(createElement) { 
 
    return createElement('div', { 
 
    \t domProps: { 
 
     \t innerHTML: '&nbsp;' 
 
     } 
 
    }) 
 
    } 
 
}) 
 

 
new Vue({ 
 
    el: '#app', 
 
    components: [ 
 
    'my-component' 
 
    ] 
 
}) 
 

 
console.log(document.getElementById('app').firstChild.innerHTML)
<script src="https://unpkg.com/vue/dist/vue.js"></script> 
 

 
<div id="app"> 
 
    <my-component></my-component> 
 
</div>

評論後更新:

你可以用這樣的孩子填充您的組件:

Vue.component('my-component', { 
 
    render: function(createElement) { 
 
    return createElement('div', 
 
    [ 
 
     createElement('p', 'top tag'), 
 
     createElement('div', { 
 
     domProps: { 
 
      innerHTML: 'A&nbsp;B' 
 
      } 
 
     }), 
 
     createElement('p', 'bottom tag'), 
 
    ] 
 
    ) 
 
    } 
 
}) 
 

 
new Vue({ 
 
    el: '#app', 
 
    components: [ 
 
    'my-component' 
 
    ] 
 
}) 
 

 
console.log(document.getElementById('app').firstChild.innerHTML)
<script src="https://unpkg.com/vue/dist/vue.js"></script> 
 

 
<div id="app"> 
 
    <my-component></my-component> 
 
</div>

+0

嗯,好,那做的伎倆。但是如果同一元素內還有其他孩子呢? 「innerHTML」與其他元素不搭配... –

+0

@TomasButeler查看答案中的更新。 – wostex