【发布时间】:2021-07-23 07:18:33
【问题描述】:
我想要做的是有一个根元素,其中包含一个包含内部 html 的道具,例如:hello<b>hey</b>
但我不能使用 v-html,因为这个元素也有子元素,例如:
<template>
<component :is="element.tag" contenteditable="true">
<div contenteditable="false">
<span class="delete-obj" :id="'delete'+element.id" >delete</span>
</div>
<RenderString :string="element.content" />
</component>
</template>
<script>
import Vue from "vue";
Vue.component("RenderString", {
props: {
string: {
required: true,
type: String
}
},
render(h) {
const render = {
template: this.string ,
methods: {
markComplete() {
console.log('the method called')
}
}
}
return h(render)
}
})
export default {
name: "VElement",
props: {
element: {
required: false,
default: null
},
},
}
</script>
我已经尝试过上述方法,并且尝试过使用插槽。我可以使用像 element.innerText 这样的普通 JavaScript 来解决它,但我不想这样做。主要目标是当他们键入元素时元素是可编辑的,他们正在编辑将呈现的 element.content,其中的 div 是我也需要的普通 HTML。
主要问题是我想要的内部 HTML 没有根元素。
元素类似于:
{id:1,tag:"div",content:"hello<b>hey</b>"}
我希望最终结果是:
<div contenteditable="true">
<div contenteditable="false">
<span class="delete-obj" :id="'delete'+element.id" >delete</span>
</div>
hello<b>hey</b>
<div>
当我点击内部时我想编辑hello<b>hey</b>,我不希望它包裹在其他任何东西中,如果我将 v-html 放在外部 div 上,内部 div 就消失了。
【问题讨论】:
-
你的脚本块在哪里?您正在使用
element,但您没有显示它的定义位置 -
@Jonathan 脚本没有什么重要的,但我编辑给你看,元素就这么简单
-
v-html 指令应该使用类似“hellohey”的字符串
-
你
<div contenteditable="false">的问题内容是否被用户编辑? -
@Seblor 是的,我知道这行得通,但把它放在外部 div 上,
<div contenteditable="false">消失了,取而代之的是字符串
标签: javascript html vue.js vue-component vue-dynamic-components