Skip to content

Commit 7f0c72b

Browse files
Merge pull request #523 from DevExpress/template_item_index
Add item index to dxTemplate for collection widgets
2 parents e8d4f4f + 14b4c9c commit 7f0c72b

File tree

2 files changed

+49
-4
lines changed

2 files changed

+49
-4
lines changed

src/core/template.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export const DX_TEMPLATE_WRAPPER_CLASS = 'dx-template-wrapper';
1818

1919
export class RenderData {
2020
model: any;
21-
itemIndex: number;
21+
index: number;
2222
container: any;
2323
}
2424

@@ -40,7 +40,10 @@ export class DxTemplateDirective {
4040
}
4141

4242
render(renderData: RenderData) {
43-
let childView = this.viewContainerRef.createEmbeddedView(this.templateRef, { '$implicit': renderData.model });
43+
let childView = this.viewContainerRef.createEmbeddedView(this.templateRef, {
44+
'$implicit': renderData.model,
45+
index: renderData.index
46+
});
4447
if (renderData.container) {
4548
renderData.container.append(childView.rootNodes);
4649
}

tests/src/core/template.spec.ts

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
DxComponent,
2424
DxTemplateHost,
2525
DxTemplateModule,
26+
DxTemplateDirective,
2627
WatcherHelper
2728
} from '../../../dist';
2829

@@ -69,9 +70,33 @@ export class DxTestWidgetComponent extends DxComponent implements AfterViewInit
6970
}
7071
}
7172

73+
@Component({
74+
selector: 'dx-test',
75+
template: '',
76+
providers: [DxTemplateHost, WatcherHelper]
77+
})
78+
export class DxTestComponent extends DxComponent implements AfterViewInit {
79+
templates: DxTemplateDirective[];
80+
81+
constructor(elementRef: ElementRef, ngZone: NgZone, templateHost: DxTemplateHost, _watcherHelper: WatcherHelper) {
82+
super(elementRef, ngZone, templateHost, _watcherHelper);
83+
}
84+
85+
protected _createInstance() {}
86+
87+
ngAfterViewInit() {
88+
this.templates[0].render({
89+
model: {},
90+
container: $(this.element.nativeElement),
91+
index: 5
92+
});
93+
}
94+
}
95+
7296
@Component({
7397
selector: 'test-container-component',
74-
template: ''
98+
template: '',
99+
providers: [DxTemplateHost]
75100
})
76101
export class TestContainerComponent {
77102
@ViewChildren(DxTestWidgetComponent) innerWidgets: QueryList<DxTestWidgetComponent>;
@@ -83,7 +108,7 @@ describe('DevExtreme Angular widget\'s template', () => {
83108
beforeEach(() => {
84109
TestBed.configureTestingModule(
85110
{
86-
declarations: [TestContainerComponent, DxTestWidgetComponent],
111+
declarations: [TestContainerComponent, DxTestWidgetComponent, DxTestComponent],
87112
imports: [DxTemplateModule]
88113
});
89114
});
@@ -141,5 +166,22 @@ describe('DevExtreme Angular widget\'s template', () => {
141166

142167
}));
143168

169+
170+
it('should have item index', async(() => {
171+
TestBed.overrideComponent(TestContainerComponent, {
172+
set: {
173+
template: `
174+
<dx-test>
175+
<div *dxTemplate="let d of 'templateName'; let i = index">index: {{i}}</div>
176+
</dx-test>
177+
`}
178+
});
179+
let fixture = TestBed.createComponent(TestContainerComponent);
180+
fixture.detectChanges();
181+
182+
let element = fixture.nativeElement.querySelector('div');
183+
expect(element.textContent).toBe('index: 5');
184+
}));
185+
144186
});
145187

0 commit comments

Comments
 (0)