Можно попробовать вот так (см код ниже). По сути это решение Philipp Kühn, но для вашего случая, когда в файлах хранятся шаблоны, а не компоненты. Чтобы заработало, нужно настроить загрузчик для html файлов (
raw-loader отлично подойдёт) и включить компилятор в сборку (
вариант "полный").
В теории это можно оптимизировать до функционального компонента, но на практике почему-то не работает. Может быть, у меня руки кривые)
export default {
props: {
name: {
type: String,
default: 'default'
}
},
computed: {
component () {
// Не сокращать до одной строки, иначе свойство не будет реактивным.
const name = this.name
return () => this.load(name)
}
},
methods: {
async load (name) {
// В import() должен быть статический элемент (как './templates/'), иначе не заработает.
const { default: template } = await import(`./templates/${name}.html`)
return { template }
}
},
render (h) {
return h(this.component)
}
}