mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
fix(collectionRepeat): rerender when $ionicScrollDelegate resizes
Fixes #1777
This commit is contained in:
4
js/angular/controller/scrollController.js
vendored
4
js/angular/controller/scrollController.js
vendored
@@ -116,7 +116,9 @@ function($scope, scrollViewOptions, $timeout, $window, $$scrollValueCache, $loca
|
||||
};
|
||||
|
||||
this.resize = function() {
|
||||
return $timeout(resize);
|
||||
return $timeout(resize).then(function() {
|
||||
$element.triggerHandler('scroll.resize');
|
||||
});
|
||||
};
|
||||
|
||||
this.scrollTop = function(shouldAnimate) {
|
||||
|
||||
8
js/angular/directive/collectionRepeat.js
vendored
8
js/angular/directive/collectionRepeat.js
vendored
@@ -224,6 +224,7 @@ function($collectionRepeatManager, $collectionDataSource, $parse) {
|
||||
var beforeSiblings = [];
|
||||
var afterSiblings = [];
|
||||
var before = true;
|
||||
|
||||
forEach(scrollViewContent.children, function(node, i) {
|
||||
if ( ionic.DomUtil.elementIsDescendant($element[0], node, scrollViewContent) ) {
|
||||
before = false;
|
||||
@@ -248,16 +249,17 @@ function($collectionRepeatManager, $collectionDataSource, $parse) {
|
||||
dataSource.setData(value, beforeSiblings, afterSiblings);
|
||||
collectionRepeatManager.resize();
|
||||
}
|
||||
function onWindowResize() {
|
||||
function rerenderOnResize() {
|
||||
rerender($scope.$eval(listExpr));
|
||||
}
|
||||
|
||||
ionic.on('resize', onWindowResize, window);
|
||||
scrollCtrl.$element.on('scroll.resize', rerenderOnResize);
|
||||
ionic.on('resize', rerenderOnResize, window);
|
||||
|
||||
$scope.$on('$destroy', function() {
|
||||
collectionRepeatManager.destroy();
|
||||
dataSource.destroy();
|
||||
ionic.off('resize', onWindowResize, window);
|
||||
ionic.off('resize', rerenderOnResize, window);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -152,6 +152,16 @@ describe('collectionRepeat directive', function() {
|
||||
expect(scrollView.resize.callCount).toBe(1);
|
||||
});
|
||||
|
||||
it('should rerender on scrollCtrl resize', inject(function($timeout) {
|
||||
var el = setup('collection-repeat="item in items" collection-item-height="50"');
|
||||
var scrollCtrl = el.controller('$ionicScroll');
|
||||
repeatManager.resize.reset();
|
||||
|
||||
scrollCtrl.resize();
|
||||
$timeout.flush();
|
||||
expect(repeatManager.resize.callCount).toBe(1);
|
||||
}));
|
||||
|
||||
it('$destroy', function() {
|
||||
var el = setup('collection-repeat="item in items" collection-item-height="50"');
|
||||
dataSource.destroy = jasmine.createSpy('dataSourceDestroy');
|
||||
|
||||
Reference in New Issue
Block a user