javascript - 如何在 Vue JS 2 中间接自嵌套组件?

标签 javascript vue.js vue-component

我设法使用 name 属性直接创建自嵌套组件,并且一切正常。

<template>
    <div>
        <span>Hi, I'm component A!</span>
        <component-a></component-a>
    </div>
</template>

<script>
    export default {
        name: 'component-a',
        components: {
            'component-a': this
        }
    }
</script>

现在,我想创建间接的自嵌套组件。像这样:

ComponentA.vue:

<template>
    <div>
        <span>Hi, I'm component A!</span>
        <component-b v-if="hasItems" v-for="item in items" :item="item"></component-b>
    </div>
</template>

<script>
    import ComponentB from './ComponentB.vue'

    export default {
        name: 'component-a',
        components: {
            'component-b': ComponentB
        },
        props: ['items'],
        computed: {
            hasItems() {
                return this.items.length > 0
            }
        }
    }
</script>

ComponentB.vue:

<template>
    <div>
        <span>Hi, I'm component B!</span>
        <component-a v-if="hasItems" :items="item.items"></component-a>
    </div>
</template>

<script>
    import ComponentA from './ComponentA.vue'

    export default {
        name: 'component-b',
        components: {
            'component-a': ComponentA
        },
        props: ['item'],
        computed: {
            hasItems() {
                return this.item.items.length > 0
            }
        }
    }
</script>

但是那失败了。我收到以下错误:

[Vue warn]: Failed to mount component: template or render function not defined. (found in component )

有没有人遇到过这样的事情并且能够解决它?根据文档,我们通过条件渲染控制递归组件,这就是我正在做的......我什至尝试在组件上使用 name Prop ,但它什么也没做(我认为它不应该因为组件不直接自嵌套)。

最佳答案

我试过你的代码,但我也遇到了同样的错误,不知道如何继续。后来我关闭了我的 vue-cli 并尝试直接从 CDN(独立​​版本)使用 vue.js,它工作正常。

这是工作示例:https://jsfiddle.net/mani04/z09Luphg/

这里没有魔法。 组件 A组件 B 使用 counterValue 相互调用。一旦 counterValue 达到某个限制,递归就会停止。

如果您没有得到更好的答案,并且您无法修改您的应用程序架构,您可以尝试使用这种独立 vue.js 方法。

编辑:下面有更多信息

在今天的进一步研究中,我发现了这个关于 webpack 循环导入/循环依赖的 github 讨论:https://github.com/webpack/webpack/issues/1788

上面的独立 jsFiddle 示例不需要任何 ES6 导入。在我的示例代码中,Vue.js 在启动应用程序之前全局注册组件。因此它可以正常工作。

总之,这看起来不像是 Vue.js 的问题,而是基于当前信息的 webpack/es6 限制。我可能是错的,请继续探索!

关于javascript - 如何在 Vue JS 2 中间接自嵌套组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40194697/

相关文章:

javascript - 如何清除以这种特定方式设置的间隔

javascript - JQGrid 4.3.2 读取JSON数据时getAccessor函数出错

javascript - Angular - 我在 View 中有一个元素绑定(bind)到服务中的变量,但是当服务更新时 View 没有更新

vue.js - 错误类型错误 : The 'compilation' argument must be an instance of Compilation

javascript - vue.js 2 中哪个更好,使用 v-if 还是 v-show?

javascript - 如何检测当前Vue实例中是否使用了vue-router?

javascript - Vue.js - 将变量附加到组件

javascript - 如何使用可变版本参数(可变参数)创建外部javascript链接

css - 如何使用 Vue 渲染 CSS 网格的标记?

javascript - 一个 vue 实例中具有多个数据的类似组件