$ location.path更改路径,不导航,但刷新显示两次[Ionic]

时间:2017-01-31 17:59:18

标签: javascript angularjs ionic-framework

我尝试在成功登录后导航到页面。登录页面是通过inappbrowser调用的网页。现在,当inappbrowser成功验证用户时,它应该导航到视图。

我使用了$ location.path并正确地更改了路径。但是,它在加载时不会在设备上显示。(虽然它在Chrome上正确显示)

但是,当我添加 window.location.reload(true)语句时,它会加载所需的页面,然后再次加载它。

我如何停止重装两次?

.service('LoginService',function($q,$rootScope,$cordovaInAppBrowser,$http,$state,jwtHelper,$location) {
 return {
    loginUser: function() {
        var deferred = $q.defer();
        var promise = deferred.promise;
  $cordovaInAppBrowser.open(url).then(function(event) {     
    console.log(event);
     // success
  })
$rootScope.$on('$cordovaInAppBrowser:loadstop', function(e, event){
if(userIsValid){
deferred.resolve(username); //Here i validate the user and change the location
$location.path('app/playlists');
               }
}

promise.success = function(fn) {
            promise.then(fn);
            return promise;
        }
        promise.error = function(fn) {
            promise.then(null, fn);
            return promise;
        }
        return promise;
    }
}

现在,在app.js

 .state('app.playlists', {
  url: '/playlists',
  views: {
    'menuContent': {
      templateUrl: 'templates/playlists.html',
      controller: 'PlaylistsCtrl'
    }
  }
})

现在,在LoginController中

.controller('LoginCtrl', function($scope,$timeout,$rootScope,LoginService,  $ionicPopup, $state,$location) {
$scope.login = function() {       
    LoginService.loginUser().success(function(data) {
        console.log(data);           
}).error(function(data) {
        var alertPopup = $ionicPopup.alert({
            title: 'Login failed!',
            template: 'Please check your credentials!'
        });
    });

}

}) }

1 个答案:

答案 0 :(得分:1)

您不应该使用window.location.reload。您应该包含$ location模块并执行重置您的状态路由器的$route.reload()。您还可以尝试使用$state.reload(); $state.go($state.current, {}, {reload: true});

我知道IONIC缓存存在问题,当涉及到基于路由的导航检查时$ionicConfigProvider.views.maxCache(0);应该添加IONIC配置的地方。