Vue.js 在webcomponent构建中使用插槽时,VueJS$children为空

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

我正在尝试使用VueJS构建两个自定义元素,这样它们就可以嵌套并在任何网页或CMS中使用,如Wordpress或webapp framework,而无需npm/webpacker等。可以将此视为使用VueJS构建一对自定义
  • 元素。这是一个再现我的问题的最小示例:

    我创建了两个单文件组件:

    组件/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'