From 726bdd6c536964851385921f59a415abcb7ae4ce Mon Sep 17 00:00:00 2001 From: VladimirAmiorkov Date: Fri, 15 Feb 2019 11:35:35 +0200 Subject: [PATCH 1/2] fix(list-view): add support for "defailtTemplate" --- nativescript-angular/directives/templated-items-comp.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/nativescript-angular/directives/templated-items-comp.ts b/nativescript-angular/directives/templated-items-comp.ts index 43e873d2a..81d6cbe72 100644 --- a/nativescript-angular/directives/templated-items-comp.ts +++ b/nativescript-angular/directives/templated-items-comp.ts @@ -154,6 +154,12 @@ export abstract class TemplatedItemsComponent implements DoCheck, OnDestroy, Aft } viewRef = args.view[NG_VIEW]; + + // No ng-template is setup, continue with 'defaultTemplate' + if (viewRef) { + return; + } + // Getting angular view from original element (in cases when ProxyViewContainer // is used NativeScript internally wraps it in a StackLayout) if (!viewRef && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) { From 4061cc725393ac705e59bd0eb06fbabca06cdaa5 Mon Sep 17 00:00:00 2001 From: VladimirAmiorkov Date: Fri, 15 Feb 2019 14:41:12 +0200 Subject: [PATCH 2/2] fix(list-view): Add support for default item template --- .../directives/templated-items-comp.ts | 10 +++--- tests/app/tests/list-view-tests.ts | 36 +++++++++++++++++-- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/nativescript-angular/directives/templated-items-comp.ts b/nativescript-angular/directives/templated-items-comp.ts index 81d6cbe72..f3644f071 100644 --- a/nativescript-angular/directives/templated-items-comp.ts +++ b/nativescript-angular/directives/templated-items-comp.ts @@ -155,11 +155,6 @@ export abstract class TemplatedItemsComponent implements DoCheck, OnDestroy, Aft viewRef = args.view[NG_VIEW]; - // No ng-template is setup, continue with 'defaultTemplate' - if (viewRef) { - return; - } - // Getting angular view from original element (in cases when ProxyViewContainer // is used NativeScript internally wraps it in a StackLayout) if (!viewRef && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) { @@ -169,6 +164,11 @@ export abstract class TemplatedItemsComponent implements DoCheck, OnDestroy, Aft if (!viewRef && isLogEnabled()) { listViewError(`ViewReference not found for item ${index}. View recycling is not working`); } + + // No ng-template is setup, continue with 'defaultTemplate' + if (!viewRef) { + return; + } } if (!viewRef) { diff --git a/tests/app/tests/list-view-tests.ts b/tests/app/tests/list-view-tests.ts index d72ef13f2..43de0f846 100644 --- a/tests/app/tests/list-view-tests.ts +++ b/tests/app/tests/list-view-tests.ts @@ -1,7 +1,8 @@ import { assert } from "./test-config"; -import { Component, Input } from "@angular/core"; +import { Component, Input, ViewChild } from "@angular/core"; import { ComponentFixture, async } from "@angular/core/testing"; import { nsTestBedAfterEach, nsTestBedBeforeEach, nsTestBedRender } from "nativescript-angular/testing"; +import { ListViewComponent } from "nativescript-angular/directives"; // import trace = require("trace"); // trace.setCategories("ns-list-view, " + trace.categories.Navigation); // trace.enable(); @@ -76,11 +77,34 @@ export class TestListViewSelectorComponent { constructor() { testTemplates = { first: 0, second: 0 }; } } +@Component({ + selector: "list-view-default-item-template", + template: ` + + + + ` +}) +export class TestDefaultItemTemplateComponent { + public myItems: Array; + constructor () { + this.myItems = new Array(); + for (let i = 0; i < 100; i++) { + this.myItems.push(new DataItem(i, "Name " + i)); + } + } + @ViewChild("listView") listViewElement: ListViewComponent; + onScrollListViewTo() { + this.listViewElement.nativeElement.scrollToIndex(100); + } +} + describe("ListView-tests", () => { beforeEach(nsTestBedBeforeEach([ TestListViewComponent, TestListViewSelectorComponent, - ItemTemplateComponent + ItemTemplateComponent, + TestDefaultItemTemplateComponent ])); afterEach(nsTestBedAfterEach(false)); @@ -98,4 +122,12 @@ describe("ListView-tests", () => { assert.deepEqual(testTemplates, { first: 2, second: 1 }); }); })); + + it("'defaultTemplate' does not throw when list-view is scrolled", async(() => { + nsTestBedRender(TestDefaultItemTemplateComponent) + .then((fixture: ComponentFixture) => { + const component = fixture.componentRef.instance; + assert.doesNotThrow(component.onScrollListViewTo.bind(component)); + }); + })); });