Skip to content

Commit 8fe239c

Browse files
Move update templates from AfterContentChecked to VIewChecked (#1354) (#1358)
* Move update templates from AfterContentChecked to VIewChecked * Add test * fix lint issues * rename test component selector
1 parent 68e9bd3 commit 8fe239c

File tree

2 files changed

+52
-3
lines changed

2 files changed

+52
-3
lines changed

packages/devextreme-angular/src/core/component.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import {
1212
OnInit,
1313
DoCheck,
1414
AfterContentChecked,
15-
AfterViewInit
15+
AfterViewInit,
16+
AfterViewChecked
1617
} from '@angular/core';
1718

1819
import { isPlatformServer } from '@angular/common';
@@ -44,7 +45,7 @@ export const getServerStateKey = () => {
4445
@Component({
4546
template: ''
4647
})
47-
export abstract class DxComponent implements OnChanges, OnInit, DoCheck, AfterContentChecked, AfterViewInit,
48+
export abstract class DxComponent implements OnChanges, OnInit, DoCheck, AfterContentChecked, AfterViewInit, AfterViewChecked,
4849
INestedOptionContainer, ICollectionNestedOptionContainer, IDxTemplateHost {
4950
private _initialOptions: any = {};
5051
protected _optionsToUpdate: any = {};
@@ -219,7 +220,6 @@ export abstract class DxComponent implements OnChanges, OnInit, DoCheck, AfterCo
219220
}
220221

221222
ngAfterContentChecked() {
222-
this._updateTemplates();
223223
this.applyOptions();
224224
this.resetOptions();
225225
this.unlockWidgetUpdate();
@@ -231,6 +231,10 @@ export abstract class DxComponent implements OnChanges, OnInit, DoCheck, AfterCo
231231
this.recreatedNestedComponents = [];
232232
}
233233

234+
ngAfterViewChecked(): void {
235+
this._updateTemplates();
236+
}
237+
234238
applyOptions() {
235239
if (Object.keys(this._optionsToUpdate).length) {
236240
if (this.instance) {

packages/devextreme-angular/tests/src/core/template.spec.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,19 @@ export class TestContainerComponent {
137137
}
138138
}
139139

140+
@Component({
141+
selector: 'dx-imitation',
142+
template: `
143+
<div *dxTemplate="let d of 'ImportedTemlate'">
144+
<div>123213</div>
145+
</div>
146+
`
147+
})
148+
export class ImitateImportComponent {
149+
constructor() {
150+
}
151+
}
152+
140153

141154
describe('DevExtreme Angular widget\'s template', () => {
142155

@@ -169,6 +182,38 @@ describe('DevExtreme Angular widget\'s template', () => {
169182

170183
});
171184

185+
it('should be able to load template imported from another component', () => {
186+
TestBed.configureTestingModule(
187+
{
188+
declarations: [TestContainerComponent, DxTestWidgetComponent, DxTestComponent, ImitateImportComponent],
189+
imports: [DxTemplateModule, BrowserTransferStateModule]
190+
});
191+
TestBed.overrideComponent(TestContainerComponent, {
192+
set: {
193+
template: `
194+
<dx-test-widget testTemplate="ImportedTemlate">
195+
<dx-imitation></dx-imitation>
196+
</dx-test-widget>
197+
`
198+
}
199+
});
200+
let fixture = TestBed.createComponent(TestContainerComponent);
201+
fixture.detectChanges();
202+
203+
let testComponent = fixture.componentInstance,
204+
innerComponent = testComponent.widget,
205+
templatesHash = innerComponent.instance.option('integrationOptions.templates'),
206+
template = innerComponent.testTemplate,
207+
container = document.createElement('div');
208+
209+
expect(template).not.toBeUndefined;
210+
211+
templatesHash[template].render({ container: container });
212+
fixture.detectChanges();
213+
214+
expect(container.children[0].classList.contains('dx-template-wrapper')).toBe(true);
215+
});
216+
172217

173218
it('should add template wrapper class as template has root container', () => {
174219
TestBed.overrideComponent(TestContainerComponent, {

0 commit comments

Comments
 (0)