From f049521095f139d61a049f5d0ee353bc187687b4 Mon Sep 17 00:00:00 2001 From: Adam Bradley Date: Wed, 8 Jun 2016 21:52:45 -0500 Subject: [PATCH] fix(virtualScroll): detect changes in individual nodes Closes #6137 --- .../virtual-scroll/test/basic/index.ts | 9 +++++-- .../virtual-scroll/test/basic/main.html | 2 +- .../virtual-scroll/virtual-scroll.ts | 27 ++++++++++++------- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/components/virtual-scroll/test/basic/index.ts b/src/components/virtual-scroll/test/basic/index.ts index d79fb112da..5467475bd2 100644 --- a/src/components/virtual-scroll/test/basic/index.ts +++ b/src/components/virtual-scroll/test/basic/index.ts @@ -6,13 +6,18 @@ import {ionicBootstrap} from '../../../../../src'; templateUrl: 'main.html' }) class E2EPage { - items = []; + items: any[] = []; @ViewChild('content') content: ElementRef; constructor() { for (var i = 0; i < 200; i++) { - this.items.push(i); + this.items.push({ + value: i, + someMethod: function() { + return `!!` + } + }); } } diff --git a/src/components/virtual-scroll/test/basic/main.html b/src/components/virtual-scroll/test/basic/main.html index e867c64f8c..920548c175 100644 --- a/src/components/virtual-scroll/test/basic/main.html +++ b/src/components/virtual-scroll/test/basic/main.html @@ -18,7 +18,7 @@ - Item: {{item}} + Item: {{item.value}} {{item.someMethod()}} diff --git a/src/components/virtual-scroll/virtual-scroll.ts b/src/components/virtual-scroll/virtual-scroll.ts index 77ea344b03..614b17e629 100644 --- a/src/components/virtual-scroll/virtual-scroll.ts +++ b/src/components/virtual-scroll/virtual-scroll.ts @@ -436,7 +436,7 @@ export class VirtualScroll implements DoCheck, AfterContentInit, OnDestroy { this._ftrTmp && this._ftrTmp.templateRef, true); // ******** DOM WRITE **************** - this._cd.detectChanges(); + this.detectChanges(); // wait a frame before trying to read and calculate the dimensions nativeRaf(this.postRenderVirtual.bind(this)); @@ -470,6 +470,20 @@ export class VirtualScroll implements DoCheck, AfterContentInit, OnDestroy { ); } + /** + * @private + */ + detectChanges() { + let node: VirtualNode; + for (var i = 0; i < this._nodes.length; i++) { + node = this._nodes[i]; + if (node.hasChanges) { + node.view['detectChanges'](); + node.hasChanges = false; + } + } + } + /** * @private */ @@ -481,14 +495,7 @@ export class VirtualScroll implements DoCheck, AfterContentInit, OnDestroy { if (this._queue === QUEUE_CHANGE_DETECTION) { // ******** DOM WRITE **************** - let node: VirtualNode; - for (var i = 0; i < this._nodes.length; i++) { - node = this._nodes[i]; - if (node.hasChanges) { - node.view['detectChanges'](); - node.hasChanges = false; - } - } + this.detectChanges(); if (this._eventAssist) { // queue updating node positions in the next frame @@ -573,7 +580,7 @@ export class VirtualScroll implements DoCheck, AfterContentInit, OnDestroy { adjustRendered(this._cells, this._data); // ******** DOM WRITE **************** - this._cd.detectChanges(); + this.detectChanges(); // ******** DOM WRITE **************** this.setVirtualHeight(