vue-property-decorator 定义组件 name 记录

vue-property-decorator 组件名称定义

记录一下使用 vue-property-decorator 是因为 component name 被坑的经历

使用普通写法写 vue 组件的时候, 通常使用 name 字段声明组件名称

export default {
	name: 'MyComponet'
}

而使用 vue-property-decorator 时, 通常会直接定义 class name

import { Vue, Component } from 'vue-property-decorator';

@Component
export default class MyComponent extends Vue {}

看起来好像是没有问题, 定义了一个 name 为 MyComponent 的组件, class 的名称就是组件的名称, 但实际不是.

第一个很坑的点

在代码中 import 这个组件让后打印组件的名称, 确实会打印出 MyComponent.
就算用 MyComponet.name 去注册组件也是可以的
例如:

import Vue from 'vue';
import MyComponent from 'MyComponent';

console.log(MyComponent.name) // MyComponent
Vue.component(MyComponent.name, MyComponent);

上面的代码都是可以得到预期结果的, 但是实际上 MyComponent 这个组件的 name 并没有被定义.

为什么这么说呢? 如果你使用过组件递归就知道, 使用递归的组件必须定义组件的name, 而上面使用 vue-property-decorator 定义的组件, 无法被递归.

第二个很坑的点

当你在本地运行项目时, 递归是成功的, 但是一旦打包发布之后, 线上的结果就坑爹了.
所以必须要在 @component({name: string})定义才行

import { Vue, Component } from 'vue-property-decorator';

@Component({
	name: 'MyComponent',
})
export default class MyComponent extends Vue {}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值