การใช้โครงสร้าง Directive ที่กำหนดเองกับดัชนี:
ตามเอกสารเชิงมุม:
createEmbeddedView
สร้างมุมมองที่ฝังไว้ในอินสแตนซ์และแทรกลงในคอนเทนเนอร์นี้
abstract createEmbeddedView(templateRef: TemplateRef, context?: C, index?: number): EmbeddedViewRef
.
Param Type Description
templateRef TemplateRef the HTML template that defines the view.
context C optional. Default is undefined.
index number the 0-based index at which to insert the new view into this container. If not specified, appends the new view as the last entry.
เมื่อเชิงมุมสร้างแม่แบบโดยการเรียก createEmbeddedView ng-template
ก็ยังสามารถส่งผ่านบริบทที่จะใช้ภายใน
การใช้พารามิเตอร์ทางเลือกบริบทคุณสามารถใช้ในส่วนประกอบโดยแยกออกมาในเทมเพลตเช่นเดียวกับที่คุณใช้กับ * ngFor
app.component.html:
<p *for="number; let i=index; let c=length; let f=first; let l=last; let e=even; let o=odd">
item : {{i}} / {{c}}
<b>
{{f ? "First,": ""}}
{{l? "Last,": ""}}
{{e? "Even." : ""}}
{{o? "Odd." : ""}}
</b>
</p>
for.directive.ts:
import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
class Context {
constructor(public index: number, public length: number) { }
get even(): boolean { return this.index % 2 === 0; }
get odd(): boolean { return this.index % 2 === 1; }
get first(): boolean { return this.index === 0; }
get last(): boolean { return this.index === this.length - 1; }
}
@Directive({
selector: '[for]'
})
export class ForDirective {
constructor(private templateRef: TemplateRef<any>, private viewContainer: ViewContainerRef) { }
@Input('for') set loop(num: number) {
for (var i = 0; i < num; i++)
this.viewContainer.createEmbeddedView(this.templateRef, new Context(i, num));
}
}