_Angular 6
_(6.0.7)では、CLI経由でコンポーネントを生成しようとしています。 _ng g c t1-2-3-user
_と入力してエラーメッセージを表示Selector (app-t1-2-3-user) is invalid.
この名前に本質的に許可されていないものはありますか? _t1-myModule
_を介して_ng g module t1-myModule
_と呼ばれる親モジュールをすでに作成しており、正常に作成されました。そのモジュール内で、このコンポーネントを生成しようとしています。
_ng g c t1-testComponent
_のような別の名前を作成してみましたが、正常に機能します。CLIが壊れていないようです。私の設定でコンポーネントに_t1-2-3-user
_という名前を付けることは、Angularには好まれません。
編集:さらにテストを行った結果、次のように表示されますAngularダッシュの後の最初の文字_-
_が数値であることは望ましくありません。 JavaScript変数の場合と同様の制限です。JavaScriptにコンパイルされるためと思いますか?このコンポーネントの命名制約について詳しく説明/確認できますか?
W3C標準 セレクターに従って、セレクターは以下のもののセットを修飾する必要があります
CSSでは、識別子(セレクターの要素名、クラス、IDを含む)に
- 文字[a-zA-Z0-9]およびISO 10646文字U + 00A0以上、さらにハイフン(-)および下線(_)のみ。
- 数字、2つのハイフン、またはハイフンの後に数字を続けることはできません。
- 識別子には、エスケープ文字とISO 10646文字を数値コードとして含めることもできます(次の項目を参照)。たとえば、識別子「B&W?」 「B \&W \?」と書くことができますまたは「B\26 W\3F」。
したがって、Angularはセレクター名のW3C規則に従っています。私はどこかで同様のものが内部のコードで焼かれるのを見ることを期待されていました。 CLIコードを掘り下げた後ファイルを作成する前に、angularが正規表現(/^[a-zA-Z][.0-9a-zA-Z]*(:?-[a-zA-Z][.0-9a-zA-Z]*)*$/
)を使用してselector
名を検証していることがわかります。
そのため、ng generate component component-name
コマンドの実行中に、@angular/schematics
for component
コマンドを呼び出し、コンポーネント名パラメーターをそれに渡します。一連の命令を使用してコマンドを実行しているときに、セレクタを検証するために 下の行 を起動します。
validateHtmlSelector(options.selector);
export const htmlSelectorRe = /^[a-zA-Z][.0-9a-zA-Z]*(:?-[a-zA-Z][.0-9a-zA-Z]*)*$/;
export function validateHtmlSelector(selector: string): void {
if (selector && !htmlSelectorRe.test(selector)) {
throw new SchematicsException(tags.oneLine`Selector (${selector})
is invalid.`);
}
}