Vue.js 组件 - 组件间的循环引用

例如:组件A,组件A里有一个子组件C和D,组件C的子组件又引用了组件D,这种情况会报警告

循环调用组件时,组件比vue实例后创建,官方文档里写组件必须先于实例化引入,所以说组件没有正确的引入。

 

Vue.component 全局注册组件时,组件循环引用可以解开。全局引入组件,并且在vue实例化前。

import PosterTemplate from '@/components/SmartPoster/Template'
Vue.component('PosterTemplate', PosterTemplate)

 

当组件不是全局注册的时候 我们使用递归组件需要经过处理才使用
解决方案:

方案一
推荐使用 webpack的异步组件 通过 import 引入如下
异步组件的注册是一个箭头函数

 components: {
    PosterTemplate: () => import('./Template.vue')
  },

方案二   

  beforeCreate: function () {
  //beforeCreate () {
    // 官方文档给出的是require
    // this.$options.components.PosterTemplate = require('./Template.vue')
    // 在基于vue-cli@2.8.1按照上面的写法还是会报错
    // Failed to mount component: template or render function not defined.
    // 所以我们应该改为基于es6的写法异步加载一个组件如下
    this.$options.components.PosterTemplate = () => import('./Template.vue')
  },

注意:vue 生命周期函数不可用箭头函数  beforeCreate    (methods里面的函数同样道理)

因为箭头函数是和父级上下文绑定在一起的,this 不会是如你所预期的 Vue 实例,经常导致报错

vue Error in beforeCreate hook: "TypeError: Cannot read property '$options' of undefined"

 

参考资料:
1、https://cn.vuejs.org/v2/guide...
2、https://cn.vuejs.org/v2/guide...

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值