2017-10-04 10 views
1

この奇妙な問題に直面していますが、バグかここで何か不足しているかどうかはわかりません。
私はTestComponentと呼ばれるコンポーネントを持っています.AppComponentには、これをクリックするとボタンがあります。TestComponentの名前はTestComponent.nameです。

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には、実際の関数名が含まれています。関数が1文字の名前に縮小されている場合、元の名前は失われます。何らかの時点で、つまりすべてのクライアントサイドアプリケーションで、を縮小することが可能なアプリケーションに決して頼るべきではありません。 Node.jsには例外があるかもしれません。

nameは一部のブラウザでは読み取り専用であるため、上書きすることはできません。クラス識別子を必要とする場合、それは別の名前で明示的に指定する必要があります。

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

ここrelated questionです。

2

angle-cli/webpackや他のツールがJavaScriptコードを小さくしてクラス名を変更しているので、これは正常です。したがって、生産現場での小型化後には、常に1つの手紙またはそれに類するものだけが表示されます。

この名前は、実稼働環境で破損する可能性があるため、ロジックには使用しないでください。

+0

解決策は何ですか?私は実際に多くの動的コンポーネントに基づいているアプリケーションで作業していて、特定のイベントの後に特定のコンポーネントの名前を取得する必要があるときに、この問題に直面しました! – SlimenTN

+0

あなた自身の識別子を作成する – Moema

関連する問題