vuejs递归单个文件组件

时间:2018-12-12 16:46:31

标签: vue.js vuejs2

  

未知的自定义元素:-您是否注册了组件   正确吗?对于递归组件,请确保提供“名称”   选项。

我有一个侧边栏,其中包含一个TreeList,该TreeList包含每个TreeNode的TreeNode。

对于其他遇到此问题的人,我已经读了很多。我尝试了诸如为组件指定烤肉串用例名称之类的解决方案。我已经读到这是名称空间的问题,并且我同意,因为我有一个示例在单个文件中处理所有组件。当组件位于单独的文件中时,使用vue CLI重新加载脚本时会发生上述错误。有时,在保存文件时没有解释,错误消失了,递归再次起作用。

然后,当其正常工作时,单击子节点时会出现错误。

  

无法读取未定义的属性“ length”       在simpleNormalizeChildren

与vue CLI服务有关系吗? 我愿意在全局名称空间中声明这些内容,除非不确定该如何正确工作。

import TreeList from './TreeList.vue'

export default {
    name: 'tree-node',
    components: {
        'tree-list': TreeList
    },

...

import TreeNode from './TreeNode.vue'

export default {
    name: 'tree-list',
    components: {
        'tree-node': TreeNode
    }

...

import TreeList from './TreeList.vue'
import TreeNode from './TreeNode.vue'

export default {
    name: 'Sidebar',
    components: {
        TreeList,
        TreeNode
    }

1 个答案:

答案 0 :(得分:3)

这可能是由于TreeNodeVue.component组件之间的circular referencing导致的。.

  

仔细观察,您会发现这些组件实际上将   成为渲染树中彼此的后代和祖先-   矛盾!

要解决此矛盾,您可以使用beforeCreate在全球范围内注册组件,也可以将其中一个组件的导入推迟到以后(通过将导入移动到TreeList.vue钩子或使用async components来演示here)..

export default { name: 'tree-list', components: { 'tree-node': () => import('./TreeNode.vue') } ... }

{{1}}