AngularJS OnsenUI reload parent page on nav.popPage() in child page

前端 未结 3 2010
深忆病人
深忆病人 2020-12-18 08:43

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

相关标签:
3条回答
  • 2020-12-18 08:48

    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++;
    };
    
    0 讨论(0)
  • 2020-12-18 08:49

    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!

    0 讨论(0)
  • 2020-12-18 09:05

    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.

    0 讨论(0)
提交回复
热议问题