我需要找到一种方法来完全重新加载路线。
在我的情况下: 父状态具有子状态-1和子状态状态-2 在url之后,parent-state / child-state-1将触发父状态的执行,进行所需的api调用,child-state-1从中获取一些信息。 但是如果我从州 - 孩子1开始到州 - 孩子2, 将保留父状态,并且不会再次进行api调用,因此state-child-2将有错误的信息。
这种依赖是为了避免重复的api调用以及允许模板继承。
我发现添加 ui-sref-opts =“{reload:true}”会重新加载我的状态,这是完美的,但如果我使用后退/前进按钮在我的浏览器/鼠标上保留了父状态,这搞砸了东西。
然后我搜索了一些,发现this是我的解决方案,在转换选项中添加了reload true。
我发现mihgt必须放在run block中,因为我会进行auth检查。因此,如果这改变了状态转换,我就可以强制重新加载。
我的运行块是:
run.$inject = ['$uiRouter', '$state', '$cookies', '$rootScope', '$http', '$transitions', '$trace'];
function run($uiRouter, $state, $cookies, $rootScope, $http, $transitions, $trace) {
var pluginInstance = $uiRouter.plugin(Visualizer);
$trace.enable('TRANSITION');
// keep user logged in after page refresh
$rootScope.globals = $cookies.getObject('globals') || {};
if ($rootScope.globals.currentUser) {
$http.defaults.headers.common['Authorization'] = $rootScope.globals.currentUser.token_type + ' ' + $rootScope.globals.currentUser.access_token;
}
//Redirect to login if not authenticated before any transition
$transitions.onStart({
to: function(state) {
// if state name is login or register
if (state.name === 'login' || state.name === 'register'){
// break out of the redirect because auth not needed
return false;
} else{
//continue to redirect
return true;
}
}
}, function(trans) {
var loggedIn = $rootScope.globals.currentUser;
if (!loggedIn) {
return trans.router.stateService.transitionTo('login');
}
});
}
我还没有找到合适的方法,所以我要求你的帮助。
我的猜测是,我需要添加以下内容: $ state.transitionTo($ staste.current.name,{$ stateParams},{reload:true}) 因为我不需要覆盖状态参数。