[英]Angular4: Component.name doesn't work on production
所以我一直在面对这个奇怪的问题,但是我不确定这是一个错误还是我在这里丢失了一些东西。
因此,我有一个名为TestComponent
的组件,在AppComponent中,当我单击它时有一个按钮,通过执行此TestComponent.name
可以得到TestComponent
的名称。
AppComponent :
import { TestComponent } from './test/test.component';
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: '<button (click)="showName()">Show</button>'
})
export class AppComponent {
showName(){
console.log('component name: "' + TestComponent.name + '"');
}
}
如您所见,通过单击按钮,我想获取TestComponent的名称,该名称基本上是“ TestComponent”
问题是,这在开发模式下效果很好,如果我调用ng build
也可以正常工作,这就是我在控制台中得到的:
当我调用ng build --prod
来压缩文件并减小其大小时,我得到以下结果:
这正常吗?
是的,这是正常的,因为angular-cli / webpack和其他工具通过最小化JavaScript代码来更改类名称。 因此,在最小化生产版本后,您始终只会看到一个字母或类似内容。
不要在您的逻辑中使用该名称,因为它会破坏生产。
我刚刚在这里回答了一个相关的问题
要变通解决类名的问题,可以创建一个函数并检查它是否等于要测试的类。 在这种情况下,可以使用TestComponent
:
getType(o: any): string {
if (o === TestComponent)
return 'TestComponent';
}
并调用它会打印组件名称:
console.log(getType(TestComponent)); // will print 'TestComponent'
我发现的最好方法是使用一个在编译时重命名该类的库,其工作方式类似于C#nameof。 nameof<MyInterface>();
结果:“ MyInterface”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.