0

ユーザーがログインしているかどうかを確認するために、ui-router と satellizer で angular を使用しています。これが私のコード例です:

var App = angular.module('myApp', ['satellizer', 'ui.router']);
    App.config(function ($stateProvider, $urlRouterProvider) {
        $urlRouterProvider.otherwise('/app/blank');
        $stateProvider
                .state('app', {
                    url: '/app',
                    abstract: true,
                    template: 'View<br><div ui-view=""></div>',
                    resolve: {
                        authorize: ['authService', function (authService) {
                            return authService.isLoggedin();
                        }]
                    }
                })
                .state('app.blank', {
                    url: '/blank',
                    title: 'Blank',
                    template: '<div>blank</div>'
                })
                .state('page', {
                    url: '/page',
                    template: 'Page<br><div ui-view=""></div>'
                })
                .state('page.login', {
                    url: '/login',
                    title: "Login",
                    template: 'Login'
                });
    });
    App.factory('authService', function ($rootScope, $state, $auth) {
                return {
                    isLoggedin: function () {
                        if (!$auth.isAuthenticated()) {
                            console.log('not logged in');
                            $state.go('page/login');
                            return true;
                        }
                    }
                };
            }
    );

$stateProvider では、解決を使用して、ユーザーがログインしているかどうかを確認します。そうでない場合、スクリプトは状態ページ/ログインに移動する必要がありますが、そうではありません-単に動作を停止します。そのコードを修正するには?

4

2 に答える 2

2

$state.go('page.login');の代わりに使用します$state.go('page/login');(ドットに注意してください!)

州の URL ではなく、州名に変更する必要があります。

于 2014-11-19T16:25:41.013 に答える
0

$state が機能しない場合。$injector が機能するかどうかを確認し、次のように $state を $injector に変更します。

App.factory('authService', function ($rootScope, $injector, $auth) {
            return {
                isLoggedin: function () {
                    if (!$auth.isAuthenticated()) {
                        console.log('not logged in');
                        $injector.get('$state').go('page.login');
                        return true;
                    }
                }
于 2016-05-26T16:16:47.757 に答える