2👍
If you really aren’t able to wrap the content in a parent element, maybe a good approach is to write a VUE directive that render the text.
//DIRECTIVE
Vue.directive('string', {
inserted(el, bind) {
/**
* Here you can manipulate the element as you need.
*/
el.insertAdjacentText('beforeend', bind.value);
}
});
//TEMPLATE
<template>
<component :is="element.tag" contenteditable="true" v-string="element.content">
<div contenteditable="false">
<span>delete</span>
</div>
</component>
</template>
- [Vuejs]-In laravel i can show the product name, how to show it in vue.js
- [Vuejs]-Vue.js 2 how to properly nest components
1👍
Like Seblor said, v-html will work with nested html strings.
Simply replacing the RenderString
component with a <div v-html="element.content"/>
should get you what you want.
Tested with the given example of hello<b>hey</b>
:
Vue.component('VElement', {
name: "VElement",
props: {
element: {
required: false,
default: null
},
},
template: '\
<component :is="element.tag" contenteditable="true">\
<div contenteditable="false">\
<span class="delete-obj" :id="\'delete\'+element.id">delete</span>\
</div>\
<div v-html="element.content"/>\
</component>'
})
new Vue({
el: '#app'
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<v-element :element="{id:1, tag:'div', content:'hello<b>hey</b>'}" />
</div>
Source:stackexchange.com