diff --git a/js/angular/controller/navViewController.js b/js/angular/controller/navViewController.js index 1b8448c54d..0bf842ca58 100644 --- a/js/angular/controller/navViewController.js +++ b/js/angular/controller/navViewController.js @@ -23,6 +23,7 @@ function($scope, $element, $attrs, $compile, $controller, $ionicNavBarDelegate, var activeEleId; var navViewAttr = $ionicViewSwitcher.navViewAttr; + self.scope = $scope; self.init = function() { var navViewName = $attrs.name || ''; diff --git a/js/angular/directive/collectionRepeat.js b/js/angular/directive/collectionRepeat.js index e63505d952..e51ee69482 100644 --- a/js/angular/directive/collectionRepeat.js +++ b/js/angular/directive/collectionRepeat.js @@ -143,9 +143,11 @@ function($collectionRepeatManager, $collectionDataSource, $parse) { transclude: 'element', terminal: true, $$tlb: true, - require: '^$ionicScroll', + require: ['^$ionicScroll', '^?ionNavView'], controller: [function(){}], - link: function($scope, $element, $attr, scrollCtrl, $transclude) { + link: function($scope, $element, $attr, ctrls, $transclude) { + var scrollCtrl = ctrls[0]; + var navViewCtrl = ctrls[1]; var wrap = jqLite('
'); $element.parent()[0].insertBefore(wrap[0], $element[0]); wrap.append($element); @@ -205,7 +207,8 @@ function($collectionRepeatManager, $collectionDataSource, $parse) { scrollView: scrollCtrl.scrollView, }); - $scope.$watchCollection(listExpr, function(value) { + var listExprParsed = $parse(listExpr); + $scope.$watchCollection(listExprParsed, function(value) { if (value && !angular.isArray(value)) { throw new Error("collection-repeat expects an array to repeat over, but instead got '" + typeof value + "'."); } @@ -245,16 +248,21 @@ function($collectionRepeatManager, $collectionDataSource, $parse) { collectionRepeatManager.resize(); } function rerenderOnResize() { - rerender($scope.$eval(listExpr)); + rerender(listExprParsed($scope)); } scrollCtrl.$element.on('scroll.resize', rerenderOnResize); ionic.on('resize', rerenderOnResize, window); + var deregisterViewListener; + if (navViewCtrl) { + deregisterViewListener = navViewCtrl.scope.$on('$ionicView.beforeEnter', rerenderOnResize); + } $scope.$on('$destroy', function() { collectionRepeatManager.destroy(); dataSource.destroy(); ionic.off('resize', rerenderOnResize, window); + (deregisterViewListener || noop)(); }); } };