Я пытаюсь визуально представить библиотеку компонентов. Я использую Dynami c <component>
S для рендеринга каждого компонента. Однако, поскольку я заполняю компонент его слотами, у меня возникают проблемы из-за отсутствия родительских методов.
Я хочу, чтобы компоненты работали (демо), поэтому мне нужно компенсировать, что this.$parent
не работает.
<template>
<component v-bind:is="'s-' + comp.name" v-bind="props" ref="comp"> <!-- this is the corrent parent-->
<div v-if="comp.slots">
<div
v-for="(slot, i) in comp.slots"
v-bind:key="i"
v-bind:slot="slot.name"
>
<div v-if="slot.type == 'component'"> <!-- childs parent -->
<de-mo v-bind:comp="slot" /> <!-- this is the child calling a method on the parent -->
</div>
<div v-html="slot.value" v-else></div>
</div>
</div>
</component>
</template>
<script>
export default {
name: 'deMo',
computed: {
props() {
if (this.comp.props) {
return this.comp.props.reduce((a, r) => {
a[r.name] = r.value
return a
}, {})
}
}
},
props: {
comp: {
type: Object,
required: true
}
},
methods: this.$ref.comp.methods, //<-- this is an error
mounted(){
console.log(this.$ref.comp.methods)
}
},
</script>
<style></style>
1) Есть ли способ скопировать методы из родительского объекта в этот «демонстрационный» компонент через ref
attr 2) В качестве альтернативы, есть ли лучший метод для получения тех же результатов?
Спасибо