Попробуйте использовать директиву v: html .
document.addEventListener('DOMContentLoaded', function () {
let ExampleComponent = {
data: function () { return {} },
props: ['type'],
template: `
<div>
<span :class="type">Decoration</span>
<slot name="myslot">default content</slot>
</div>
`
}
new Vue({
el: '#app',
components: {
'example': ExampleComponent
},
data() { return {} },
computed: {
addExampleComponent: function () {
let target = this.$el.querySelector('.example-target')
let ComponentClass = Vue.extend(ExampleComponent)
let instance = new ComponentClass({
propsData: { type: 'primary' }
})
instance.$slots.myslot = target.outerHTML
instance.$mount()
return instance.$options.template
}
}
})
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.10/vue.js"></script>
<body>
<div id="app">
<div class="example-target">replace me!</div>
<div>
<div v-html="addExampleComponent"></div>
</div>
</div>
</body>