VUE组件注册的坑之驼峰命名

一、现象

      我自定义了很多组件,并统一全局注册。其中一个3D词云组件,name设置为“det-words3d”。其他组件都没有问题,唯有这个组件一直提示未注册。

二、分析

      所有组件的格式、引入方式、注册方式都是统一的,组件本身没有任何问题。仔细观察后发现,这个组件和其他组件唯一的区别就是,name中包括一个数字。于是从组件注册的源头开始寻找原因,全局注册组件代码如下:

requireComponent.keys().forEach(fileName => {
    // 获取组件配置
    const componentConfig = requireComponent(fileName);
    const defaultName = componentConfig.default.name;
    console.log('defaultName',defaultName)
    // 获取组件的 PascalCase 命名
    const componentName = upperFirst(
        camelCase(
            // 获取和目录深度无关的文件名
            defaultName
                .replace(/\-\$/, '')
        )
    )
    console.log('componentName',componentName)
    // 全局注册组件
    Vue.component(
        componentName,
        componentConfig.default || componentConfig
    )
})

      部分输出结果如下:

      由输出结果可知,3D词云组件注册的驼峰式名称为DetWords3D。尝试在页面中局部引入3D词云组件,并注册组件名称为DetWords3D。

      惊奇的发现,在template中使用这个组件时,正确使用的标签应该是<det-words3-d>

三、结论

      由上分析可知,由于name中包含数字,转换为驼峰命名时将数字后面的d转换成了大写,虽然全局注册了3D词云组件,但注册的其实是<det-words3-d>标签,所以当使用<det-words3d>标签时,会报错,提示<det-words3d>未注册。在注册组件命名时尽量避免使用数字,更不要将数字放到一个“词”的中间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值