2017-12-18 142 views
0

我正在编写一个Angular应用程序,使用Angular CLI构建。我的组件中有一个名为​​的模型。该模型将使用前一页中的用户输入来构建。在当前页面中,我将这个模型中包含的数据以HTML表格的形式显示给用户。下面是我如何做到这一点:ngFor模板解析错误:解析器错误:意外的标记=列

<input type="radio" [(ngModel)]="criteria1" name="parameter1Identifier">Class A 
<input type="radio" [(ngModel)]="criteria1" name="parameter1Identifier">Class B 
. 
. 

<input type="radio" [(ngModel)]="criteria2" name="parameter2Identifier">Type 1 
<input type="radio" [(ngModel)]="criteria2" name="parameter2Identifier">Type 2 
. 
. 

<table> 
<thead> 
    <tr *ngIf="tableColumnCount"> 
    <th *ngFor="let colNumber of tableColumnCount | rangePipe"> 
     <input type="checkbox" 
      [checked]=false 
      (click)="selectAllElementsInColumnOfTheTableIn(colNumber);"> 
     select column {{ n + 1 }} 
    </th> 
    </tr> 
</thead> 

<tbody> 
    <tr *ngFor="let row of globalModel | modelToArrayOfArraysFilter: criteria1: criteria2;"> 
    <td *ngFor="let acol of row; let i = index; totalColumnsOfTheTable = row.length">  <--- Error! 
     .... 
    </td> 
    </tr> 
</tbody> 
</table> 

而且totalColumnsOfTheTable在组件定义如下:

set totalColumnsOfTheTable(count: number) { 
    if (this.tableColumnCount < count) { 
     this.tableColumnCount = count; 
     this._cd.detectChanges(); 
    } 
} 

在该表的row可以有任意数量的像[OBJ],[OBJ1元素, obj2],[objA,objB,objC],[objN] ...基于用户在单选按钮上选择的criteria1criteria2从模型中过滤此数据。所以基于此,表数据被填充。变量tableColumnCount将具有总列数的计数,并且该表应该相应地更新。要确定总列数,我试图使用*ngFor中的setter作为totalColumnsOfTheTable = row.length

但是,角抛出错误像

"Template parse errors: Parser Error: Unexpected token = at column 65 in [let acol of row; let i = index; totalColumnsOfTheTable = index] ".

我尝试使用trackBy到acheve相同。我发现this没有提到'组件'。所以,如果我拨打this.totalColumnsOfTheTable = index不起作用!
请帮助我确定总列数或任何其他方式来设置*ngFor循环内的组件变量。任何帮助是极大的赞赏。任何建议的方法是非常值得欢迎的!

回答

0

你穿上新变量前面忘了let,它应该是这样的:

<td *ngFor="let acol of row; let i = index; let totalColumnsOfTheTable = row.length">...</td> 
+0

如果我添加让利,它成为模板的局部变量。但是,我希望它在组件中。这就是为什么我没有添加“let”的原因。有没有办法可以将'index'值存储在'public totalColumnsOfTheTable:number;'组件的变量中? – prabhu

+0

啊我看到对不起,你知道你的变量globalModel将在哪里更新吗?也许你可以用一个“set globalModel”和一个循环来计算其中每个项目的长度? – Poney

+0

如果理解正确,点击单选按钮后变量会被更新,您可以在每个上添加(更改)这个函数来计算每一行的长度。 – Poney