2017-05-02 133 views
2

我有这个ng-template。一切与循环一起工作。唯一的问题是我无法将“title”变量与“let-title”一起传递。Angular 2 - 将变量传递给ng-template

我的语法有什么问题?我需要* ngIf作为星号吗?

“selectPerm(title)”不起作用。它总是未定义的。

<ng-template ngFor 
      let-perm 
      let-title="permission.title" 
      [ngForOf]="permission.data.permissions" 
      *ngIf="editForm.controls.permissions.controls[permission.data.id].value == '0'"> 
      <tr> 
       <td></td> 
       <td>{{perm.name}}</td> 
       <td><label>Allow: <input type="radio" value="1" formControlName="{{perm.id}}" (click)="selectPerm(title)"></label></td> 
       <td><label>Deny: <input type="radio" value="-1" formControlName="{{perm.id}}" (click)="selectPerm(title)"></label></td> 
       <td></td> 
      </tr> 
</ng-template> 
+0

我相信你引用变量的权限,但是你有没有宣布变量。由于权限未定,permission.title将失败。不确定,但会用'perm.title'替换'permission.title'解决它? – birwin

+0

1. ngFor NgForOfContext从ngForOf创建一个上下文,let-title不会执行任何操作。 2.如果你认为你可以只对一个元素应用一个strutual指令。所以没有ngFor和ngIf在一起。 –

回答

1

试着将你的“TR”标签的* ngIf然后引用perm.title而不是一个模板输入变量:

<ng-template ngFor 
     let-perm 
     [ngForOf]="permission.data.permissions"> 
     <tr *ngIf="editForm.controls.permissions.controls[permission.data.id].value == '0'"> 
      <td></td> 
      <td>{{perm.name}}</td> 
      <td><label>Allow: <input type="radio" value="1" formControlName="{{perm.id}}" (click)="selectPerm(perm.title)"></label></td> 
      <td><label>Deny: <input type="radio" value="-1" formControlName="{{perm.id}}" (click)="selectPerm(perm.title)"></label></td> 
      <td></td> 
     </tr> 
</ng-template>