我想开始为 Angular 做贡献,我有一个功能的想法,如果模板包含两个同名的模板变量,我希望模板编译器发出警告。我想我设法接近了负责的源文件:https ://github.com/angular/angular/blob/master/packages/compiler/src/view_compiler/view_compiler.ts但找不到位置,这是可以理解的. 这里有人可以指导我吗?
问问题
839 次
1 回答
1
您需要查看_assertNoReferenceDuplicationOnTemplate方法:
_assertNoReferenceDuplicationOnTemplate(result: TemplateAst[], errors): void {
const existingReferences: string[] = [];
result.filter(element => !!(<any>element).references)
.forEach(element => (<any>element).references.forEach((reference: ReferenceAst) => {
const name = reference.name;
if (existingReferences.indexOf(name) < 0) {
existingReferences.push(name);
} else {
const error = new TemplateParseError(
`Reference "#${name}" is defined several times`, reference.sourceSpan,
ParseErrorLevel.ERROR);
errors.push(error);
}
}));
}
Angular 编译器创建 AST,其中一种节点类型是ElementAST,它具有references
以下属性:
export class ElementAst implements TemplateAst {
constructor(
public name: string,
public references: ReferenceAst[],
...
这是在_assertNoReferenceDuplicationOnTemplate
函数中检查的属性,如果发现则会生成错误。
于 2017-09-14T08:36:10.073 回答