【发布时间】:2021-01-26 15:47:24
【问题描述】:
我有一个 JS 对象,我需要能够从中创建 html 元素并在 Vue.JS 中呈现它。到目前为止,我的解决方案是获取对象,将 HTML 元素创建为字符串,然后将其添加到模板中。然而,虽然这能正确显示元素,但锚标签是不可点击的。
<template>
<div>
<template v-if="elementData">
<ul>
<li v-for="(value, key) in elementData" :key="key">
<div v-html='value'></div>
</li>
</ul>
</template>
</div>
</template>
<script>
const about = [
[
'This is normal text ',
{
text: 'im a link',
link: 'https://www.stack-overflow.com',
},
', is not bad ',
],
[
'More text and text',
],
];
export default {
data() {
return {
elementData: [],
};
},
mounted() {
this.setData();
},
methods: {
setData() {
this.elementData = about.map((paragraph) => {
let pElement = '<p>';
paragraph.forEach((part) => {
if (typeof part === 'object') {
const link = `<a target="_" :href="${ part.link }">${ part.text }</a>`;
pElement = pElement.concat(link);
} else pElement = pElement.concat(part);
});
pElement.concat('</p>');
return pElement;
});
},
},
};
</script>
问题可能来自我没有创建实际的 html 元素(例如在使用原版 JS 的 document.createElement('div') 时)。但是,我不知道如何做到这一点 Vue.JS。
【问题讨论】:
-
渲染功能可以解决您的问题。看看吧vuejs.org/v2/guide/render-function.html
标签: javascript html vue.js vuejs2