Angular 组件命名限制 - “选择器 [您的组件名称] 无效”
Posted
技术标签:
【中文标题】Angular 组件命名限制 - “选择器 [您的组件名称] 无效”【英文标题】:Angular component naming limitations - 'selector [your component name] is invalid' 【发布时间】:2019-04-13 08:51:47 【问题描述】:在Angular 6
(6.0.7) 中,我试图通过 CLI 生成一个组件。我输入ng g c t1-2-3-user
并收到错误消息Selector (app-t1-2-3-user) is invalid.
此名称中是否存在本质上不允许的内容?我已经通过ng g module t1-myModule
创建了一个名为t1-myModule
的父模块,并且创建成功。在该模块内是我试图生成这个组件的地方。
我尝试创建一个不同的名称,例如 ng g c t1-testComponent
,它工作正常 - 所以 CLI 似乎没有损坏。 Angular 不喜欢在我的设置中命名组件 t1-2-3-user
。
编辑: 经过进一步测试,Angular 似乎不喜欢破折号 -
之后的第一个字符是数字。可能与 JavaScript 变量中的限制类似。我假设因为它被编译成 JavaScript?谁能详细说明/确认这个组件命名约束?
【问题讨论】:
【参考方案1】:根据W3C standards 选择器应符合以下条件
在 CSS 中,标识符(包括元素名称、类和 ID) 选择器)可以包含
仅字符 [a-zA-Z0-9] 和 ISO 10646 字符 U+00A0 及更高,加上连字符 (-) 和下划线 (_); 它们不能以数字、两个连字符或连字符后跟 一个数字 标识符还可以包含转义字符和任何 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
命令时,它会为component
命令调用@angular/schematics
,并将组件名称参数传递给它。在使用一组指令执行命令时,它会触发 below line 以验证选择器。
validatehtmlSelector(options.selector);
validation.ts
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.`);
【讨论】:
以上是关于Angular 组件命名限制 - “选择器 [您的组件名称] 无效”的主要内容,如果未能解决你的问题,请参考以下文章