我有以下带插槽的组件:
<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
的 TypeScript 定义文件,发现 Vue 组件实例上有一个未记录的函数:$createElement()
。我的猜测是,它与传递给组件的 render(createElement)
函数的函数相同。所以,我能够解决它:
const Constr = Vue.extend(MyComponent);
const instance = new Constr({
propsData: { someProp: 'My Heading' }
});
// Creating simple slot
const node = instance.$createElement('div', ['Hello']);
instance.$slots.default = [node];
instance.$mount(body);
但这显然是没有记录的,因此是有问题的方法。如果有更好的方法可用,我不会将其标记为已回答。
关于javascript - 如何以编程方式创建 Vue.js 插槽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50150668/