diff --git a/src/angular/index.ts b/src/angular/index.ts index 8b9f327..be7fa19 100644 --- a/src/angular/index.ts +++ b/src/angular/index.ts @@ -79,8 +79,7 @@ export interface SetupItemViewArgs { `, changeDetection: ChangeDetectionStrategy.OnPush }) -export class PagerComponent - implements DoCheck, OnDestroy, AfterViewInit { +export class PagerComponent implements DoCheck, OnDestroy, AfterViewInit { private viewInitialized: any; private _selectedIndex: any; private _items: any; @@ -181,6 +180,7 @@ export class PagerComponent }; this._templateMap.set(key, keyedTemplate); + this.setItemTemplates(); } ngOnDestroy() { diff --git a/src/package.json b/src/package.json index ef38e8f..90cc26f 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-pager", - "version": "7.0.12", + "version": "7.0.13", "description": "", "main": "pager", "typings": "index.d.ts", diff --git a/src/pager.common.ts b/src/pager.common.ts index aa51223..fad8890 100644 --- a/src/pager.common.ts +++ b/src/pager.common.ts @@ -6,11 +6,17 @@ import { KeyedTemplate, Template } from 'tns-core-modules/ui/core/view'; +import {} from 'tns-core-modules/'; import { isIOS } from 'tns-core-modules/platform'; import * as types from 'tns-core-modules/utils/types'; import { parse, parseMultipleTemplates } from 'tns-core-modules/ui/builder'; -import { Label } from 'tns-core-modules/ui/label/label'; +import { Label } from 'tns-core-modules/ui/label'; import { write, categories, messageType } from 'tns-core-modules/trace'; +import { ObservableArray } from 'tns-core-modules/data/observable-array'; +import { + addWeakEventListener, + removeWeakEventListener +} from 'tns-core-modules/ui/core/weak-event-listener'; export const ITEMLOADING = 'itemLoading'; export const LOADMOREITEMS = 'loadMoreItems'; export namespace knownTemplates { @@ -48,7 +54,7 @@ export abstract class PagerBase extends View { // TODO: get rid of such hacks. public static knownFunctions = ['itemTemplateSelector']; // See component-builder.ts isKnownFunction - abstract refresh(hardReset: boolean): void; + abstract refresh(hardReset): void; private _itemTemplateSelector: ( item: any, index: number, @@ -153,6 +159,25 @@ export abstract class PagerBase extends View { } function onItemsChanged(pager: PagerBase, oldValue, newValue) { + if (oldValue instanceof ObservableArray) { + removeWeakEventListener( + oldValue, + ObservableArray.changeEvent, + pager.refresh, + pager + ); + } + + if (newValue instanceof ObservableArray) { + addWeakEventListener( + newValue, + ObservableArray.changeEvent, + pager.refresh, + pager + ); + } + + pager.refresh(false); if (newValue) { pager.updateNativeItems(oldValue, newValue); } diff --git a/src/pager.ios.ts b/src/pager.ios.ts index 4f3f8e6..c7bebcb 100644 --- a/src/pager.ios.ts +++ b/src/pager.ios.ts @@ -100,6 +100,9 @@ export class Pager extends PagerBase { updateNativeItems(oldItems: View[], newItems: View[]) {} refresh(hardReset = false) { + if (!types.isBoolean(hardReset)) { + hardReset = false; + } this._viewMap.forEach((view, index, array) => { if (!(view.bindingContext instanceof Observable)) { view.bindingContext = null;