我尝试在成功登录后导航到页面。登录页面是通过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!'
});
});
}
}) }
答案 0 :(得分:1)
您不应该使用window.location.reload
。您应该包含$ location模块并执行重置您的状态路由器的$route.reload()
。您还可以尝试使用$state.reload();
$state.go($state.current, {}, {reload: true});
我知道IONIC缓存存在问题,当涉及到基于路由的导航检查时$ionicConfigProvider.views.maxCache(0);
应该添加IONIC配置的地方。