Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 加载状态前的角度ui路由检查条件_Javascript_Angularjs_Angular Ui Router_Angular Routing - Fatal编程技术网

Javascript 加载状态前的角度ui路由检查条件

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

使用angular,我试图根据条件进行嵌套路由。例如,在加载状态之前要检查条件

    .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重定向到其他路由您检查问题是否已解决?:)