Skip to content

Commit 5e025fb

Browse files
committed
fix(collectionRepeat): rerender when $ionicScrollDelegate resizes
Fixes #1777
1 parent 9a1f3d7 commit 5e025fb

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
lines changed

Diff for: js/angular/controller/scrollController.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,9 @@ function($scope, scrollViewOptions, $timeout, $window, $$scrollValueCache, $loca
116116
};
117117

118118
this.resize = function() {
119-
return $timeout(resize);
119+
return $timeout(resize).then(function() {
120+
$element.triggerHandler('scroll.resize');
121+
});
120122
};
121123

122124
this.scrollTop = function(shouldAnimate) {

Diff for: js/angular/directive/collectionRepeat.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ function($collectionRepeatManager, $collectionDataSource, $parse) {
224224
var beforeSiblings = [];
225225
var afterSiblings = [];
226226
var before = true;
227+
227228
forEach(scrollViewContent.children, function(node, i) {
228229
if ( ionic.DomUtil.elementIsDescendant($element[0], node, scrollViewContent) ) {
229230
before = false;
@@ -248,16 +249,17 @@ function($collectionRepeatManager, $collectionDataSource, $parse) {
248249
dataSource.setData(value, beforeSiblings, afterSiblings);
249250
collectionRepeatManager.resize();
250251
}
251-
function onWindowResize() {
252+
function rerenderOnResize() {
252253
rerender($scope.$eval(listExpr));
253254
}
254255

255-
ionic.on('resize', onWindowResize, window);
256+
scrollCtrl.$element.on('scroll.resize', rerenderOnResize);
257+
ionic.on('resize', rerenderOnResize, window);
256258

257259
$scope.$on('$destroy', function() {
258260
collectionRepeatManager.destroy();
259261
dataSource.destroy();
260-
ionic.off('resize', onWindowResize, window);
262+
ionic.off('resize', rerenderOnResize, window);
261263
});
262264
}
263265
};

Diff for: test/unit/angular/directive/collectionRepeat.unit.js

+10
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,16 @@ describe('collectionRepeat directive', function() {
152152
expect(scrollView.resize.callCount).toBe(1);
153153
});
154154

155+
it('should rerender on scrollCtrl resize', inject(function($timeout) {
156+
var el = setup('collection-repeat="item in items" collection-item-height="50"');
157+
var scrollCtrl = el.controller('$ionicScroll');
158+
repeatManager.resize.reset();
159+
160+
scrollCtrl.resize();
161+
$timeout.flush();
162+
expect(repeatManager.resize.callCount).toBe(1);
163+
}));
164+
155165
it('$destroy', function() {
156166
var el = setup('collection-repeat="item in items" collection-item-height="50"');
157167
dataSource.destroy = jasmine.createSpy('dataSourceDestroy');

0 commit comments

Comments
 (0)