인덱스와 함께 사용자 지정 구조 지시문 사용 :
Angular 문서에 따르면 :
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.
angular가 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));
}
}