mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
fix(collectionRepeat): rerender after resize/enter
Previously on every `beforeEnter`, collection-repeats within a ion-nav-view would rerender. However, this is only necessary when the window resizes. The rerender already works when the collection-repeat is within the active view because the scroll view has accurate dimensions. But when the collection-repeat is within a cached view it does not have dimensions, causing the rerender to incorrectly place its items. This update will only rerender the collection-repeat if there was a window resize, and the scroll view which the collection-repeat was in, did not have dimensions at the time of the resize. If/when the view becomes the active view again, the collection-repeat will rerender on `afterEnter` when the scroll view has accurate dimensions.
This commit is contained in:
11
js/angular/directive/collectionRepeat.js
vendored
11
js/angular/directive/collectionRepeat.js
vendored
@@ -247,15 +247,24 @@ function($collectionRepeatManager, $collectionDataSource, $parse) {
|
||||
dataSource.setData(value, beforeSiblings, afterSiblings);
|
||||
collectionRepeatManager.resize();
|
||||
}
|
||||
|
||||
var requiresRerender;
|
||||
function rerenderOnResize() {
|
||||
rerender(listExprParsed($scope));
|
||||
requiresRerender = (!scrollViewContent.clientWidth && !scrollViewContent.clientHeight);
|
||||
}
|
||||
|
||||
function viewEnter() {
|
||||
if (requiresRerender) {
|
||||
rerenderOnResize();
|
||||
}
|
||||
}
|
||||
|
||||
scrollCtrl.$element.on('scroll.resize', rerenderOnResize);
|
||||
ionic.on('resize', rerenderOnResize, window);
|
||||
var deregisterViewListener;
|
||||
if (navViewCtrl) {
|
||||
deregisterViewListener = navViewCtrl.scope.$on('$ionicView.beforeEnter', rerenderOnResize);
|
||||
deregisterViewListener = navViewCtrl.scope.$on('$ionicView.afterEnter', viewEnter);
|
||||
}
|
||||
|
||||
$scope.$on('$destroy', function() {
|
||||
|
||||
Reference in New Issue
Block a user