Вы пытаетесь скомпилировать строку как шаблоны Vue с использованием v-html.
Обратите внимание, что содержимое вставляется в виде простого HTML - оно не будет скомпилировано как шаблоны Vue
Читайте о v-html в Vue Docs .
В качестве решения вы можете прочитать эту статью
Вы нене хотите использовать библиотеку?Проверьте код ниже:
Сначала создайте файл js (предпочтительно RenderString.js
):
import Vue from "vue"
Vue.component("RenderString", {
props: {
string: {
required: true,
type: String
}
},
render(h) {
const render = {
template: "<div>" + this.string + "</div>",
methods: {
markComplete() {
console.log('the method called')
}
}
}
return h(render)
}
})
Затем в родительском компоненте:
<template>
<div><RenderString :string="htmlContent" /></div>
</template>
<script>
import RenderString from "./components/RenderString"
export default {
name: "App",
data: () => ({
htmlContent: "<input type='checkbox' v-on:change='markComplete'>"
})
}
</script>
Примечание. Я не запускал приведенный выше код, но создал аналогичный Пример CodeSandbox