AngularJs:取消路线解决而没有承诺

时间:2017-07-18 14:26:45

标签: angularjs ngroute

我需要在登录错误时取消我的路线,这是我的ANGULARJS NG-ROUTE 代码:

monApp.config(function ($routeProvider, $locationProvider){

    var rsf = { // This function tells if user is logged or not
        "check":function(stockeUtilisateur,$location,Notification){
            u = stockeUtilisateur.getUtilisateur();

                if(u.role=='admin'||u.role=='utilisateur'){
                    Notification.success("Youre logged");
                }
                else{ 
                     $location.path('/accueil');     //redirect user to home.
                    Notification.error("bad password");
                }
        }
    };

    $routeProvider
    .when('/accueil', {
      templateUrl: 'vues/accueil.html',
      controller: 'neutreCtrl'
    })
    .when('/compte', {
      templateUrl: 'vues/compte.html',
      controller: 'compteCtrl',
      resolve:rsf 
    })

    .otherwise({redirectTo: '/accueil'}); 
})

问题是我不希望在登录失败的情况下使用$location.path(),因为它重新加载整个页面,而我只需要留在路线上并简单地取消路线,只要用户登录错误。

我不知道我可以使用哪些代码,我已经尝试过而不是$location.path()event.preventDefault();但它不起作用。

我也试过resolve.cancel();,但它也不起作用,snif!

如果我删除$location.path(),则解析仍然有效,我可以在用户未登录时看到“compte”视图。

换句话说,我不想被重定向,但我想解决在密码错误的情况下什么也不做。

也许你有个主意?

谢谢。

1 个答案:

答案 0 :(得分:1)

  

问题是我不想在登录失败的情况下使用$ location.path(),因为它重新加载整个页面,而我只需要留在路线上并简单地取消路线,只要用户登录错误。

要从解析器功能取消路线更改,请使用throw statement

monApp.config(function ($routeProvider, $locationProvider){

    var rsf = { // This function tells if user is logged or not
        "check":function(stockeUtilisateur,$location,Notification){
            u = stockeUtilisateur.getUtilisateur();

                if(u.role=='admin'||u.role=='utilisateur'){
                    Notification.success("Youre logged");
                }
                else{ 
                    //$location.path('/accueil'); 
                    //Notification.error("bad password");
                    throw "bad bassword";
                }
        }
    };

    $routeProvider
    .when('/accueil', {
      templateUrl: 'vues/accueil.html',
      controller: 'neutreCtrl'
    })
    .when('/compte', {
      templateUrl: 'vues/compte.html',
      controller: 'compteCtrl',
      resolve:rsf 
    })

    .otherwise({redirectTo: '/accueil'}); 
})

当解析器函数抛出错误时,将阻止路由更改并广播$routeChangeError event