2017-07-18 11 views
1

せずにルート決意を取り消し、これは私のANGULARJSあるNG-ROUTEコード:AngularJs:私は間違ったログインの場合には、私のルートをキャンセルする必要が約束

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();を試しましたが、うまくいきません。

$location.path()を削除しても解決され、ユーザーがログに記録されていないときに「compte」ビューが表示されます。

他の言葉で言えば、リダイレクトしたくないのですが、パスワードが間違っても何もしないようにしたいと思います。

多分あなたはアイデアがありますか?

ありがとうございます。

+0

私は答えを投稿するのには自信がありませんが、速い研究では、 '$ locationChangeStart'イベントでデフォルトを使用しないように指示しています。 https://weblogs.asp.net/dwahlin/cancelling-route-navigation-in-angularjs https://stackoverflow.com/questions/16344223/angularjs-cancel-route-change-event –

+1

私は@ジョーダンをエコーし​​ます。 JDは、ルータイベントを活用すると述べた。イベントハンドラ中に確認するには、ログイン情報*いくつかの場所* **を一時的に**保存する必要があります。ログインの成功/失敗に関係なく、そのデータを必ず削除してください。 – jusopi

答えて

0

問題は、私は($ 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が放送されます。

+0

それは動作します!あなたは本当にありがとうございます! – jojo45

関連する問題