2017-10-04 41 views
1

所以我一直在面對這個奇怪的問題,但我不確定它是一個bug還是我在這裏丟失了一些東西。
所以我有一個名爲TestComponent的組件,並且在AppComponent中,當我點擊它時,我有一個按鈕,通過執行TestComponent.name來獲得TestComponent的名稱。

AppComponent
Angular4:Component.name在生產上不起作用

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太正常工作,這就是我在控制檯中看到:

enter image description here

當我打電話ng build --prod,來壓縮文件並減小它們的大小,我得到這個結果:

enter image description here

這是正常的嗎?!

+0

如何賦值給變量'name'? – Aravind

+0

@Aravind不,它不是TestComponent類中的變量,它是TypeScript上的一個函數,它可以將組件的名稱像Java中的類class.getClassName()' – SlimenTN

回答

1

Functionname包含實際的功能名稱。如果該功能被縮小爲單字母名稱,則會丟失其原始名稱。在某些情況下,即在每個客戶端應用程序中,可以將可能縮小的應用程序永遠不應該依賴它。 Node.js可能有例外。

name在某些瀏覽器中是隻讀的,因此不能被覆蓋。如果一個班級需要標識符,則應明確指定不同的名稱:

class Foo { 
    static id = 'Foo'; 
    ... 
} 

這裏是一個related question

2

是的,這是正常的,因爲angular-cli/webpack和其他工具正通過縮小JavaScript代碼來改變類名。所以在縮小生產版本之後,你總是隻能看到一個字母或類似的東西。

請勿在您的邏輯中使用此名稱,因爲它會在生產中中斷。

+0

那樣給出,那麼解決方案是什麼?實際上,當我在研究基於許多動態組件的應用程序時,我遇到了這個問題,我需要在特定事件之後獲取特定組件的名稱! – SlimenTN

+0

創建您自己的標識符 – Moema