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

标签 javascript vue.js vuejs2 vue-component

我有以下带插槽的组件:

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

相关文章:

javascript - 是否有返回函数的 javascript 函数的名称?

javascript - 向所有登录 Web 应用程序的用户播放实时通知声音,无需重新加载页面

javascript - 使用 javascript 或 jQuery 将此字符串转换为 JSON

javascript - 自动更新表单中的输入字段,vue.js

javascript - 将 VueJS 组件渲染到 Google Map Infowindow

javascript - Vue - 在其他组件中使用组件

javascript - Facebook 点赞按钮不显示

Vue.js 2 bootstrap-vue popover 持久性问题与 popper.js

javascript - v-将图像从对象绑定(bind)到 img src 不起作用

vue.js - vue 如何在 v-model 上使用 getter setter?