我正在尝试创建一个组件,它将执行一些操作并循环结果集.我希望能够为循环结果集中的项目提供"模板".
例如,这是我想要的一个想法:
<search-field>
<ng-template let-item>
<span><strong>{{item.foo}}</strong></span>
<span>{{item.bar}}</span>
</ng-template>
</search-field>
Run Code Online (Sandbox Code Playgroud)
search-field组件中的内容应该用作该组件中循环结果集的每次迭代的模板.
这是search-field组件的外观:
<div class="search-container">
<div class="search-input">
<input type="text" class="form-control" placeholder="Search users..." [(ngModel)]="searchString" (ngModelChange)="searchStringChanged($event)">
<div class="md-icon">search</div>
</div>
<ul class="search-results" *ngIf="searchResults.length > 0">
<li class="search-results__item" *ngFor="let result of searchResults">
<ng-content [item]="item"></ng-content> <!-- Template should be used here on each iteration and allow to pass in "item" to use in example up above -->
</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
如何将循环的每个项目传递给ng-content,以便我可以在第一个示例的代码中访问它?
Lan*_*ara 13
通过以下方式解决了这个问题:
组件模板用法:
<search-field>
<ng-template let-item>
<span><strong>{{item.username}}</strong></span>
<span>{{item.email}}</span>
</ng-template>
</search-field>
Run Code Online (Sandbox Code Playgroud)
组件模板定义:
<div class="search-container">
<div class="search-input">
<input type="text" class="form-control" placeholder="Search users..." [(ngModel)]="searchString" (ngModelChange)="searchStringChanged($event)">
<div class="md-icon">search</div>
</div>
<ul class="search-results" *ngIf="searchResults.length > 0">
<li class="search-results__item" *ngFor="let item of searchResults">
<ng-template [ngTemplateOutlet]="templateRef" [ngTemplateOutletContext]="{$implicit: item}"></ng-template>
</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
组件类:
@Component({...})
export class SearchFieldComponent {
@ContentChild(TemplateRef) templateRef: TemplateRef<any>;
// ...
}
Run Code Online (Sandbox Code Playgroud)
说明:
使用ng-template,我可以使用let-item语法,在item循环的每次迭代中将传递到模板的数据在哪里.
而为了使上述可能,在search-field我使用的组件ng-template与ngTemplateOutlet作为模板的参考,并且ngTemplateOutletContext被赋予值{$implicit: item},这里item是我想传递到模板中的数据.
最后,在组件类中,我需要使用它ContentChild来获取对模板的引用ngTemplateOutlet.
| 归档时间: |
|
| 查看次数: |
3486 次 |
| 最近记录: |