Skip to content

Commit 3243844

Browse files
Add item index to dxTemplate for collection widgets
1 parent e8d4f4f commit 3243844

File tree

2 files changed

+51
-4
lines changed

2 files changed

+51
-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: 46 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,35 @@ 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+
return this;
87+
}
88+
89+
ngAfterViewInit() {
90+
this.templates[0].render({
91+
model: {},
92+
container: $(this.element.nativeElement),
93+
index: 5
94+
});
95+
}
96+
}
97+
7298
@Component({
7399
selector: 'test-container-component',
74-
template: ''
100+
template: '',
101+
providers: [DxTemplateHost]
75102
})
76103
export class TestContainerComponent {
77104
@ViewChildren(DxTestWidgetComponent) innerWidgets: QueryList<DxTestWidgetComponent>;
@@ -83,7 +110,7 @@ describe('DevExtreme Angular widget\'s template', () => {
83110
beforeEach(() => {
84111
TestBed.configureTestingModule(
85112
{
86-
declarations: [TestContainerComponent, DxTestWidgetComponent],
113+
declarations: [TestContainerComponent, DxTestWidgetComponent, DxTestComponent],
87114
imports: [DxTemplateModule]
88115
});
89116
});
@@ -141,5 +168,22 @@ describe('DevExtreme Angular widget\'s template', () => {
141168

142169
}));
143170

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

0 commit comments

Comments
 (0)