开发者问题收集

组件之间的循环引用 Vue

2019-04-19
7328

我创建了两个组件(A 和 B)。我试图使它们递归。因此,CompA 调用 ComB,CompB 调用 CompA,依此类推:

Page -> CompA -> CompB -> CompA -> CompB -> ...

这是我的 CompA.Vue

<CompB></CompB>

及其 脚本

import CompB from './CompB';
export default {
    name: "CompA",
    components:{CompB},
    props:['items']
 },
 beforeCreate() {
        this.$options.components.CompB = require("./CompB").default;
    },

这是 CompB.Vue

<v-comp-a :items="test"></v-comp-a>

及其 脚本

 import CompA from '../components/CompA'
export default {
    name: "v-comp-b",
    components:{'v-comp-a':CompA},
    props: {
        label: {
            typ:String,
            required:true
        },
        properties:{
            type:Array,
            required:true
        }
    },

因此,主页加载 CompA ,我可以从那里调用 CompB ,但问题是我无法从 CompB 调用 CompA 。我收到此错误: 未知自定义元素:v-comp-a 您是否正确注册了组件?

我还在 App.Vue 中导入了这两个组件:

import CompA from './components/CompA'
import CompB from './components/CompB'

并在脚本中导入了这两个组件:

components: {
   CompA,
   CompB
}

这是传递数据的主页:

<v-comp-a :items="items"></v-comp-a>

我已经看过这个 问题 。并阅读了 此文档 。 我尝试仅显示导入,因为它会很长,我还使用了 CompA 而不是 v-comp-a 。这没有帮助。

请帮忙。我开始迷失了 :[

2个回答

您有很多语法错误:在 CompA.vue 中:

  • beforeCreate() 应该在 inside 您的导出默认值中
  • 您正在 beforeCreate 钩子中导入 CompB ,因此删除其他导入
  • 不要在 components
  • 中声明 ComB
  • (最后一个括号后还有一个逗号,但我猜实际项目中不是这种情况)

export default {
  name: "CompA",
  props:['items'],
  beforeCreate() {
    this.$options.components.CompB = require("./CompB.vue").default;
  }
}

保留 CompB.vue 原样,您应该会看到错误消失。

现在它们是递归的,但基本上 CompB CompA 中,在 CompB 中...
因此使它们递归应该会导致递归错误。

Ignace Vau
2019-04-20

借助 Vue 3,您可以使用异步组件:

export default {
  name: "CompA",
  components: {
    "CompB": defineAsyncComponent(() => import('./CompB.vue'))
  }
}

文档:

Motla
2021-09-27