I\'m calling a function on ng-init and in that page I\'m pushing a new page to the pageStack of navigator on a button click. And in the child page I\'m popping the current p
danjarvis,
Thank you for the idea! I was struggling with Onsen coming from Ionic, so your example really helped. I slightly modified it and here is an alternative if anyone was interested. It wasn't destroying ons-pages for me, which I needed it to for handling some odd duplicate directive issues. Also, I had to go back more than one page sometimes.
//function to go back and reload controller
$rootScope.index = 0;
$rootScope.replacePreviousPage = function (url) {
var c = 0;
angular.forEach(nav.getPages(), function (v, i) {
if (i >= $rootScope.index) {
nav.getPages()[i].destroy();
c++;
}
});
nav.insertPage($rootScope.index, url);
nav.popPage();
};
//back
$rootScope.back = function (page) {
if (page === "index") {
location.reload();
} else {
if (page === "version") {
$rootScope.index = $rootScope.index - 2;
} else {
$rootScope.index--;
}
$rootScope.replacePreviousPage('templates/' + page + '.html');
}
};
//forward
$rootScope.forward = function (page) {
nav.pushPage('templates/' + page + '.html');
$rootScope.index++;
};
You can use the new pageReplace() that comes with the new Onsen UI 1.3.0. You can pass it to the callback of popPage()
like this:
$scope.popAndReplace = function() {
$scope.nav.popPage({onTransitionEnd : function() {
$scope.nav.replacePage('page1.html', { animation : 'none' } );
}})
};
Working here: http://codepen.io/frankdiox/pen/gbJGZw
Hope it helps!
While Fran's answer works great, there is a small flicker / hiccup in the UI when the page gets replaced. I took a slightly different approach by using insertPage()
and changing the order of ops. The end result is smoother UI flow:
$scope.replacePreviousPage = function(url) {
var pages = $scope.nav.getPages(),
index = pages.length - 2;
if (index < 0)
return;
$scope.nav.insertPage(index, url);
pages.splice(index, 1);
};
You can create another function to encapsulate the replacing and popping, or just call them like:
$scope.replacePreviousPage('views/page1.html');
$scope.nav.popPage();
I am thinking of patching this into popPage()
as an option (i.e. option.reloadPage
) and submitting a pull request.