【问题标题】:Changing page in stateProvider not working在 stateProvider 中更改页面不起作用
【发布时间】:2016-05-27 00:16:47
【问题描述】:

我正在使用带有 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 中,我使用 resolve 来检查用户是否登录。如果不是,脚本应该移动到状态页面/登录,但它没有 - 它只是停止工作。如何修复该代码?

【问题讨论】:

  • 如果我使用$location.path("page/login") insead 或$state.go("page.login") 它可以工作,但为什么不使用ui-router 首选的$state.go??
  • 你试过$state.go('page.login')吗?

标签: angularjs angular-ui-router satellizer


【解决方案1】:

使用$state.go('page.login'); 而不是$state.go('page/login');(注意点!)

您应该更改为州名,而不是州的网址。

【讨论】:

    【解决方案2】:

    如果 $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;
                        }
                    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 2012-10-16
      • 2016-05-05
      • 2023-04-04
      • 2016-06-11
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多