【发布时间】:2020-06-03 19:49:53
【问题描述】:
我有以下应用:
<template>
<component :is="layout">
<router-view :layout.sync="layout"/>
</component>
</template>
<script>
import LayoutBlank from './LayoutBlank'
export default {
name: 'app',
data() {
return {
layout: LayoutBlank,
};
},
}
</script>
<script>
import LayoutBlankTemplate from './LayoutBlankTemplate'
export default {
name: 'LayoutBlank',
created() {
this.$parent.$emit('update:layout', LayoutBlankTemplate);
},
render() {
return this.$slots.default[0];
},
}
</script>
<template>
<div>
<slot></slot>
</div>
</template>
<script>
export default {
name: 'LayoutBlankTemplate',
}
</script>
<template>
<layout-blank>
Test content
</layout-blank>
</template>
<script>
import LayoutBlank from './LayoutBlank';
export default {
name: 'BlankTest',
components: {LayoutBlank},
}
</script>
一切正常。但现在我想在 LayoutBlankTemplate 中再添加一个插槽:
<template>
<div>
<slot></slot>
<slot name="second"></slot>
</div>
</template>
<script>
export default {
name: 'LayoutBlankTemplate',
}
</script>
并在 BlankTest 中使用它:
<template>
<layout-blank>
<template #default>Test content</template>
<template #second>Second test content</template>
</layout-blank>
</template>
<script>
import LayoutBlank from './LayoutBlank';
export default {
name: 'BlankTest',
components: {LayoutBlank},
}
</script>
代码仅呈现默认插槽内容。问题是我在 LayoutBlank 组件中使用了return this.$slots.default[0];,它只呈现默认插槽内容。
我找不到如何在 LayoutBlank::render() 方法中渲染所有插槽的方法。我知道我可以使用 this.$slots 或 this.$scopedSlots 获取插槽列表,但我找不到如何将它们传递给 LayoutBlankTemplate 以使它们呈现的方法。
【问题讨论】:
标签: javascript vue.js vuejs2