У меня есть CRUD, который позволяет мне писать код компонента Vue.js в текстовой области, например:
<template>
<div><p class='name-wrapper'>{{ model.name }}</p></div>
</template>
<script>
module.exports = {
name: 'NameWrapper',
props: ['model']
}
</script>
<style lang='sass'>
.name-wrapper
color: red
</style>
Затем в другом компоненте я получаю эти данные и хочу зарегистрировать их как динамический / асинхронный, пользовательский компонент, такой как:
<template>
<component :is='dynamicName' :model='{name: "Alex"}'></component>
</template>
<script>
import httpVueLoader from 'http-vue-loader'
import Vue from 'vue'
export default {
name: 'DynamicComponent',
props: ['dynamicName', 'componentDefinitionFromTextareaAsString'],
beforeCreate: {
// I know that as a second parameter it should be an url to the file, but I can't provide it, but I would like to pass the contents of the file instead there:
httpVueLoader.register(Vue, this.$options.propsData.componentDefinitionFromTextareaAsString)
// I was trying also:
Vue.component(this.$options.propsData.dynamicName, this.$options.propsData.componentDefinitionFromTextareaAsString)
}
}
</script>
Насколько я знаю, httpVueLoader нужен URL вместо файла .vue
- есть ли способ передать туда сам код компонента?
Мне известно, что передача и оценка содержимого тега <script></script>
может вызвать проблемы с безопасностью, но мне действительно нужно сделать это таким образом.
Я также читал о функции компиляции Vue.js, но она работает только для шаблонов, но не для кода компонента (поэтому теги script
снова).
Это дажеможно ли добиться такой функциональности в Vue.js?