27

わかりましたので、ユーザーがアクセスしようとするたびに確認する必要がある URL「/securepage」の状態があります。だから私は使用できる onEnter 関数があることを読みました。しかし、そこからスコープやサービスを手に入れることができないようです。私は何を間違っていますか?

        .state('securepage', {
            url: "/securepage",
            template: securepage.html,
            onEnter: function(){
                // if (!$scope.main.isAuthenticated) $state.go("/login");
                // if (!myLoginService.currentUser()) $state.go("/login");

私が見ている現在のオプションは、解決を使用するか、コントローラーで認証を確認することです。しかし、認証チェックは onEnter に配置したほうがよいのではないでしょうか?

4

6 に答える 6

0

遅い答えですが、とにかく書きたいと思います。可能な限り $rootScope に触れないことを好みます。これは私が現在取り組んでいるコードで、あなたの質問に対する別の解決策を要約しています:

state('dash', {
                url:'/',
                views:{
                    "topNav":{
                        templateUrl:"user/dash/partials/top-nav.html",
                        controller:'logoutCtrl',
                    },
                    "sideNav":{
                        templateUrl:"user/dash/partials/side-nav.html"
                    },
                    "body":{
                        templateUrl:"user/dash/partials/body.html",
                        controller:'testCtrl'
                    }
                },
                onEnter: function(Auth, $state){
                    if(!AuthSvc.isAuthenticated){
                        $state.go('login');
                    }
                }
            })

onEnter に注入した Auth ファクトリに注入する $localStorage サービスを提供する ngStorage を使用して、ローカル ストレージにトークンを格納するために JWT を使用しています。

于 2016-10-29T11:57:03.707 に答える
-1

おそらくあなたが意味する

.state('securepage', {
        url: "/securepage",
        template: securepage.html,
        //this is how you actually inject things to onEnter property
        onEnter: ['$state','myLoginService',function($state,myLoginService){
             if (!$scope.main.isAuthenticated) $state.go("/login");
             if (!myLoginService.currentUser()) $state.go("/login");`}]
         ....
于 2015-06-19T14:16:28.560 に答える
-3

私はui.router 0.2.10でangularjs 1.3を使用しています

この質問がされてから多くのことが変わったと確信していますが、自分で理解しなければならず、検索の結果、ここにたどり着きました...

認証を確認する限り、このようにすることができます

.state('securepage', {
        url: "/securepage",
        template: securepage.html,
        onEnter: function($scope,$state,myLoginService){ //THIS IS THE CHANGE
            if (!$scope.main.isAuthenticated) $state.go("/login");
            if (!myLoginService.currentUser()) $state.go("/login");

ほとんどのプロバイダー/サービス/ファクトリーを onEnter 関数に配置してアクセスすることができます。これは、アプリの .config 内から機能します。

そうは言っても、彼ら(UIルーターメーカー)は、カスタムルール関数を使用して内部で処理することを提案しています .$on('$stateChangeStart', function(e, to) https://github.com/angular-ui/ui-router /wiki/Frequently-Asked-Questions#how-to-create-rules-to-prevent-access-to-a-state onEnter の代わりにこれを行う理由がわかりません。誰かがそれを拡張できるかもしれません。

于 2014-06-28T14:06:06.687 に答える