簡體   English   中英

Angular 在 ng-container 中使用父作用域

[英]Angular use parent scope in ng-container

我有一個帶有一些配置的網格組件。

我想在使用組件時定義 thead 和 tbody。 這是我的組件

@Component({
selector: 'tcs-grid',
templateUrl: './tcs-grid.component.html',
styleUrls: ['./tcs-grid.component.scss']
})

export class TcsGridComponent implements OnInit {
data : any;
//some configs
}

這是 Html 模板

  <table datatable class="table tablesorter" [dtOptions]="dtOptions">
      <ng-content>

      </ng-content>
  </table>

現在我想像這樣使用它

用法:

<tcs-grid>
<thead >
    <tr>
      <th width="50px" >Row</th>
      <th>ID</th>
      <th>First name</th>
      <th>Last name</th>
    </tr>
  </thead>
  <tbody *ngIf="data?.length != 0">
    <tr *ngFor="let person of data;index as i">
        <td>{{ i + startPoint }}</td>
        <td>{{ person.id }}</td>
        <td>{{ person.firstName }}</td>
        <td>{{ person.lastName }}</td>
    </tr>
</tbody>
</tcs-grid>

我知道使用事件發射器可以輸出數據。 我想知道是否有更好的方法來訪問網格組件(父)中的數據。

謝謝

我通過使用ng-template找到解決方案,您可以創建部分模板!

不要忘記添加上下文以綁定父作用域變量

模板:

<table datatable class="table tablesorter" [dtOptions]="dtOptions">
   <ng-container  *ngTemplateOutlet="layoutTemplate; context: {persons: data}"  >

   </ng-container>
</table>

成分:

export class TcsGridComponent implements OnInit {
@ContentChild(TemplateRef,null)
@Input() layoutTemplate: TemplateRef<any>;

data : any;

ngAfterContentInit()
{
//your code 
}
}

用法:

 <tcs-grid>
 <ng-template let-persons="persons">
    <thead >
    <tr>
      <th width="50px" >Row</th>
      <th>ID</th>
      <th>First name</th>
      <th>Last name</th>
    </tr>
  </thead>
   <tbody *ngIf="persons?.length != 0">
    <tr *ngFor="let person of persons;index as i">
        <td>{{ i + startPoint }}</td>
        <td>{{ person.id }}</td>
        <td>{{ person.firstName }}</td>
        <td>{{ person.lastName }}</td>
    </tr>
   </tbody>
  </ng-template >
  </tcs-grid>

您可以通過命名 let-yourvariablename 來訪問父作用域中的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM