Javascript 加载状态前的角度ui路由检查条件
使用angular,我试图根据条件进行嵌套路由。例如,在加载状态之前要检查条件Javascript 加载状态前的角度ui路由检查条件,javascript,angularjs,angular-ui-router,angular-routing,Javascript,Angularjs,Angular Ui Router,Angular Routing,使用angular,我试图根据条件进行嵌套路由。例如,在加载状态之前要检查条件 .state('main.home', { url: "/:cnt", abstract: true, templateUrl: function ($stateParams) { return template1; }, controller: "myController", resolv
.state('main.home', {
url: "/:cnt",
abstract: true,
templateUrl: function ($stateParams) {
return template1;
},
controller: "myController",
resolve: {
//Some model
}],
lazy: ['$ocLazyLoad', '$stateParams', function ($ocLazyLoad, $stateParams) {
//lazily loaded controllers
}]
},
onEnter: updateAppValues,
}).state('main.home.default', {
url: '',
templateUrl: function ($stateParams) {
return template2;
},
resolve: {
lazy: ['$ocLazyLoad', function ($ocLazyLoad) {
//lazily loaded controllers
}]
},
controller: 'myDefaultController',
})
基本上,必须有条件地加载嵌套路由器main.home.default
if(something){
//loaded state main.home.default
}
我怎样才能做到这一点
app.run(function($rootScope, $state) {
$rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState, fromParams) {
if (toState.name == 'login'){ //if the name of that state is login
//go to login page
}
});
});
这让你有什么想法吗?或
app.run(function($rootScope, $state){
$rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState, fromParams) {
if(*your condition*) {
$state.transitTo('stateYouWantToGo')
event.preventDefault()
}
});
});
您可以通过以下方法捕捉路线更改事件:
$rootScope.$on("$routeChangeStart", function(event, next, current) {
if(next.$$route == 'routeYouWantToAvoid') { // Or whatever you want
$state.transitTo('main.home.default');
}
});
是您要去的路线next
您来自的路线当前
以下是if条件,您需要更多信息。您可以在main.home.default的解析中添加if条件。例:
resolve:{
"check":function($location){
if('Your Condition'){
//Do something
}else{
$location.path('/'); //redirect user to home.
alert("You dont belong here");
}
}
}
您可以在resolve中写入if条件,在否定情况下,使用$location path重定向到其他路由您检查问题是否已解决?:)