diff --git a/CHANGELOG.md b/CHANGELOG.md index f95af8de8..ee6adc74d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Fix the 'dx-validator' component ([#30](https://github.com/DevExpress/devextreme-angular2/issues/30)) - Fix the component property change propagation to the corresponding widget option ([#6](https://github.com/DevExpress/devextreme-angular2/issues/6)) +- Fix the 'dxTemplate' directive issues ([#4](https://github.com/DevExpress/devextreme-angular2/issues/4) and [#106](https://github.com/DevExpress/devextreme-angular2/issues/106)) ## 16.2.1-alpha.1 (2016-10-20) diff --git a/examples/app/main.ts b/examples/app/main.ts index 099e94406..bd4a4e480 100644 --- a/examples/app/main.ts +++ b/examples/app/main.ts @@ -1,10 +1,7 @@ -import { enableProdMode } from '@angular/core'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { MyAppModule } from './app.module'; import config from 'devextreme/core/config'; config({ defaulCurrency: 'EUR' }); -enableProdMode(); - platformBrowserDynamic().bootstrapModule(MyAppModule); diff --git a/src/core/dx.template.ts b/src/core/dx.template.ts index a858ffb21..e2e9a34b6 100644 --- a/src/core/dx.template.ts +++ b/src/core/dx.template.ts @@ -34,6 +34,10 @@ export class DxTemplateDirective { if (renderData.container) { renderData.container.append(childView.rootNodes); } + // =========== WORKAROUND ============= + // https://github.com/angular/angular/issues/12243 + childView['detectChanges'](); + // =========== /WORKAROUND ============= return $(childView.rootNodes); } templateAsFunction(model, itemIndex, container) { diff --git a/tests/src/ui/select-box.spec.ts b/tests/src/ui/select-box.spec.ts new file mode 100644 index 000000000..c72ca6e91 --- /dev/null +++ b/tests/src/ui/select-box.spec.ts @@ -0,0 +1,62 @@ +/// + +import { + Component, +} from '@angular/core'; + +import { + TestBed, + async +} from '@angular/core/testing'; + +import DxSelectBox from 'devextreme/ui/select_box'; + +import { + DxSelectBoxModule, + DxTextBoxModule, + DxTemplateModule +} from '../../../dist'; + +@Component({ + selector: 'test-container-component', + template: '' +}) +class TestContainerComponent { +} + +describe('DxSelectBox', () => { + + beforeEach(() => { + TestBed.configureTestingModule( + { + declarations: [TestContainerComponent], + imports: [DxSelectBoxModule, DxTextBoxModule, DxTemplateModule] + }); + }); + + function getWidget(fixture) { + let widgetElement = fixture.nativeElement.querySelector('.dx-selectbox') || fixture.nativeElement; + return DxSelectBox['getInstance'](widgetElement); + } + + // spec + it('field template should work', async(() => { + TestBed.overrideComponent(TestContainerComponent, { + set: { + template: ` + +
+ +
+
+ ` + } + }); + let fixture = TestBed.createComponent(TestContainerComponent); + fixture.detectChanges(); + + let instance = getWidget(fixture); + + expect(instance.element().find('.dx-textbox').length).toBe(1); + })); +});