2017-09-13 18 views
2

我想开始贡献角度,我有一个功能的想法,我希望模板编译器发出警告,如果模板包含两个模板变量的一样的名字。我想我已经设法接近负责的源文件:https://github.com/angular/angular/blob/master/packages/compiler/src/view_compiler/view_compiler.ts,但可以理解地找不到该位置。这里有人能指导我吗?Angular编译器如何处理具有相同名称的多个模板引用变量

+0

但编译器已经这么做了_Reference“#t”被定义了好几次(“_ –

+0

”有多么令人尴尬,你是对的......无论如何非常感谢,我会查看源文件并尝试发现当我找到它的时候我怎么没发现它 –

+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); 
      } 
     })); 
    } 

角度编译器,一个节点类型是ElementAST具有references属性创建AST:

export class ElementAst implements TemplateAst { 
    constructor(
     public name: string, 
     public references: ReferenceAst[], 
     ... 

这是检查的财产在_assertNoReferenceDuplicationOnTemplate函数中,如果发现错误生成。

相关问题