diff --git a/js/angular/directive/collectionRepeat.js b/js/angular/directive/collectionRepeat.js
index 3b5993e67a..febab84c08 100644
--- a/js/angular/directive/collectionRepeat.js
+++ b/js/angular/directive/collectionRepeat.js
@@ -406,6 +406,21 @@ function RepeatManagerFactory($rootScope, $window, $$rAF) {
(isGridView ? GridViewType : ListViewType).call(view);
(isStaticView ? StaticViewType : DynamicViewType).call(view);
+ var contentSizeStr = isVertical ? 'getContentHeight' : 'getContentWidth';
+ var originalGetContentSize = scrollView.options[contentSizeStr];
+ scrollView.options[contentSizeStr] = angular.bind(view, view.getContentSize);
+
+ scrollView.__$callback = scrollView.__callback;
+ scrollView.__callback = function(transformLeft, transformTop, zoom, wasResize) {
+ var scrollValue = view.getScrollValue();
+ if (renderStartIndex === -1 ||
+ scrollValue + view.scrollPrimarySize > renderAfterBoundary ||
+ scrollValue < renderBeforeBoundary) {
+ render();
+ }
+ scrollView.__$callback(transformLeft, transformTop, zoom, wasResize);
+ };
+
var isLayoutReady = false;
var isDataReady = false;
this.refreshLayout = function(itemsAfterRepeater) {
@@ -448,6 +463,8 @@ function RepeatManagerFactory($rootScope, $window, $$rAF) {
}
};
+
+
this.refreshData = function(newData) {
newData || (newData = []);
@@ -471,7 +488,6 @@ function RepeatManagerFactory($rootScope, $window, $$rAF) {
render.destroyed = true;
unwatch();
- scrollView.__calback = scrollView.__$callback;
itemsPool.forEach(function(item) {
item.scope.$destroy();
item.scope = item.element = item.node = item.images = null;
@@ -479,24 +495,14 @@ function RepeatManagerFactory($rootScope, $window, $$rAF) {
itemsPool.length = itemsEntering.length = itemsLeaving.length = 0;
itemsShownMap = {};
+ //Restore the scrollView's normal behavior and resize it to normal size.
+ scrollView.options[contentSizeStr] = originalGetContentSize;
+ scrollView.__callback = scrollView.__$callback;
+ scrollView.resize();
+
(view.onDestroy || angular.noop)();
};
- scrollView.options[isVertical ? 'getContentHeight' : 'getContentWidth'] =
- angular.bind(view, view.getContentSize);
-
- scrollView.__$callback = scrollView.__callback;
- scrollView.__callback = function(transformLeft, transformTop, zoom, wasResize) {
- var scrollValue = view.getScrollValue();
- if (renderStartIndex === -1 ||
- scrollValue + view.scrollPrimarySize > renderAfterBoundary ||
- scrollValue < renderBeforeBoundary) {
- render();
- }
- scrollView.__$callback(transformLeft, transformTop, zoom, wasResize);
- };
-
-
function forceRerender() {
return render(true);
}
diff --git a/test/unit/angular/directive/collectionRepeat.unit.js b/test/unit/angular/directive/collectionRepeat.unit.js
index 7c89d42aea..051431bbc0 100644
--- a/test/unit/angular/directive/collectionRepeat.unit.js
+++ b/test/unit/angular/directive/collectionRepeat.unit.js
@@ -156,14 +156,30 @@ describe('collectionRepeat', function() {
}).toThrow();
}));
- it('should destroy', inject(function($compile, $rootScope) {
+ it('should destroy and restore normal scrollView behavior', inject(function($compile, $rootScope) {
var scope = $rootScope.$new();
- var content = $compile('' +
- '' +
- '')(scope);
+ var content = $compile('')(scope);
+ var scrollView = content.data('$$ionicScrollController').scrollView;
+
+ var originalCallback = scrollView.__callback;
+ var originalGetContentHeight = scrollView.options.getContentHeight;
+
+ var repeater = angular.element(
+ ''
+ );
+ content.append(repeater);
+ $compile(repeater)(content.scope());
$rootScope.$apply();
content.triggerHandler('scroll.init');
+ $rootScope.$apply();
+
+ expect(scrollView.__callback).not.toBe(originalCallback);
+ expect(scrollView.options.getContentHeight).not.toBe(originalGetContentHeight);
+
scope.$destroy();
+
+ expect(scrollView.__callback).toBe(originalCallback);
+ expect(scrollView.options.getContentHeight).toBe(originalGetContentHeight);
}));
describe('automatic dimensions', function() {