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)();
});
}
};