gpt4 book ai didi

javascript - 如何以编程方式创建 Vue.js 插槽?

转载 作者:可可西里 更新时间:2023-11-01 02:22:36 25 4
gpt4 key购买 nike

我有以下带插槽的组件:

<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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com