Vue.js 在webcomponent构建中使用插槽时,VueJS$children为空
我正在尝试使用VueJS构建两个自定义元素,这样它们就可以嵌套并在任何网页或CMS中使用,如Wordpress或webapp framework,而无需npm/webpacker等。可以将此视为使用VueJS构建一对自定义Vue.js 在webcomponent构建中使用插槽时,VueJS$children为空,vue.js,web-component,Vue.js,Web Component,我正在尝试使用VueJS构建两个自定义元素,这样它们就可以嵌套并在任何网页或CMS中使用,如Wordpress或webapp framework,而无需npm/webpacker等。可以将此视为使用VueJS构建一对自定义和元素。这是一个再现我的问题的最小示例: 我创建了两个单文件组件: 组件/MinimalInner.vue: <template><p>Inner</p></template> <script>export defa
和元素。这是一个再现我的问题的最小示例:
我创建了两个单文件组件:
组件/MinimalInner.vue
:
<template><p>Inner</p></template>
<script>export default {}</script>
<template>
<div>Outer<slot>default slot text</slot></div>
</template>
<script>
export default {
mounted() {
console.log(this.$children.length, " children");
}
}
</script>
<template>
<div id="app">
<MinimalOuter>
<MinimalInner></MinimalInner>
</MinimalOuter>
</div>
</template>
<script>
import MinimalInner from "./components/MinimalInner.vue";
import MinimalOuter from "./components/MinimalOuter.vue";
export default {
components: {
MinimalInner,
MinimalOuter
}
};
</script>
最后,这是我的App.vue
:
<template><p>Inner</p></template>
<script>export default {}</script>
<template>
<div>Outer<slot>default slot text</slot></div>
</template>
<script>
export default {
mounted() {
console.log(this.$children.length, " children");
}
}
</script>
<template>
<div id="app">
<MinimalOuter>
<MinimalInner></MinimalInner>
</MinimalOuter>
</div>
</template>
<script>
import MinimalInner from "./components/MinimalInner.vue";
import MinimalOuter from "./components/MinimalOuter.vue";
export default {
components: {
MinimalInner,
MinimalOuter
}
};
</script>
当使用最小外部
作为带有
s的网络组件时,$children
不知何故是空的。网站上的文档只说,$children
不是被动的,订单也不保证。我不认为通过
传递子组件时,$children
数组应该为空,但我可能错了
我要实现的总体目标是什么:
我访问$children
的用例是构建一个练习抽认卡的UI,实际代码可以在这里看到:。从本质上讲,外部组件可以被认为是旋转木马,而内部组件则是幻灯片。仅显示第一张幻灯片,但用户的交互可以将第一张幻灯片推到最后一个位置,也可以从集合中删除。因此,我希望$children
将是一个VueComponent
实例数组,就像我使用vue serve-o App.vue
得到的一样,这样我就可以对它们调用$destroy
。当用户单击内部元素中的按钮时,我还需要一种方法来调用外部元素上的方法。目前,我正在通过以下方式进行:
if(this.$parent && this.$parent.doSomething)
this.$parent.doSomething();
但是我需要一种既适用于vue service-o App.vue
又适用于自定义元素(和版本)的方法。我遇到了同样的问题,向每个组件添加了vue.use调用,并在使用vue cli构建时使用了--inline vue参数。现在,Vue2将compositionapi作为web组件使用
在组件脚本标记添加中:
import VueCompositionAPI from "@vue/composition-api";
import Vue from 'vue'
Vue.use(VueCompositionAPI)
来自package.json的vue cli调用:
vue-cli-service build --inline-vue --name=fc --target=wc './src/components/*.vue'