【发布时间】:2018-10-13 12:13:35
【问题描述】:
我有以下带有插槽的组件:
<template>
<div>
<h2>{{ someProp }}</h2>
<slot></slot>
</div>
</template>
由于某些原因,我不得不手动实例化这个组件。我就是这样做的:
const Constr = Vue.extend(MyComponent);
const instance = new Constr({
propsData: { someProp: 'My Heading' }
}).$mount(body);
问题是:我无法以编程方式创建插槽内容。到目前为止,我可以创建简单的基于字符串的插槽:
const Constr = Vue.extend(MyComponent);
const instance = new Constr({
propsData: { someProp: 'My Heading' }
});
// Creating simple slot
instance.$slots.default = ['Hello'];
instance.$mount(body);
问题是 - 如何以编程方式创建 $slots 并将其传递给我正在使用 new 创建的实例?
注意:我没有使用完整版本的 Vue.js(仅限运行时)。所以我没有可用的 Vue.js 编译器来即时编译模板。
【问题讨论】:
-
我在 Vue.js 应用程序中的单元测试教程中发现,您可以在
Vue.extend中传递slot参数。在此示例中,作者使用 vue-test-utils 但我认为您可以尝试在构造函数中添加slots属性。来源:alexjoverm.github.io/2017/10/02/Test-Vue-js-Slots-in-Jest/… -
谢谢,@ThomasFerro。我试过这个,但它不起作用。它似乎使用了一些未记录的内部 API。
-
正如我所说,他正在使用 vue-test-utils。我正在尝试使用
Vue.extend() -
我不知道这是否是正确的方法,所以我只将其作为评论发布...您可以将 Vnodes 分配给 $slots.default (我在这里找到了此信息@ 987654322@) 并且您可以使用 this.$createElement (vuejs.org/v2/guide/render-function.html) 创建 vnode 我已经修改了 CSS 技巧示例中的示例,该示例显示了如何完成:codesandbox.io/s/jl66zxnwz9
标签: javascript vue.js vuejs2 vue-component