В Vue, если вам нужно передать разметку или другие компоненты в дочерний компонент, вы можете использовать слоты .
Слоты позволяют вам вкладывать компоненты в другие компоненты, как и вы делаете с HTML.
HugeBox. vue:
<template>
<Box>
<Dog/>
</Box>
</template>
<script>
import Dog from '../test/Dog.vue';
import Box from '../test/Box.vue';
export default {
components: {Dog, Box}
}
</script>
Box. vue:
<template>
<div>
<p>Box with</p>
<slot></slot>
</div>
</template>
<script>
import Box from '../test/Dog.vue';
export default {
props: {
myComponent: {
type: [String, Object],
}
},
components: { Dog }
}
</script>
Тег <slot>
используется, чтобы указать, где должен отображаться вложенный контент.
EDIT:
Таким образом, вы можете фактически передавать компоненты как свойства и отображать их с помощью метода <component :is="..." />
.
Причина, по которой он не работает, заключается в том, что ваш исходный компонент HugeBox.vue
не имеет доступа к компоненту Dog
как к переменная шаблона. Вы должны сначала назначить его свойству данных:
<template>
<Box :myComponent="dog"/>
</template>
<script>
import Dog from "../test/Dog.vue";
import Box from "../test/Box.vue";
export default {
components: { Box },
data() {
return {
dog: Dog // assign the Dog component object to data, allowing it to be passed as a prop
};
}
};
</script>