自定义数据到状态对象

时间:2016-06-24 14:52:31

标签: angularjs angular-ui-router

我试图阻止访问某些路由,我使用ui-router并将数据附加到我的状态对象,但在某些情况下,运行方法会重新启动异常" undefined requireLogin"

下面是我的代码

angular.module('app', [
'app.user' ])
.config(function ($stateProvider, $urlRouterProvider) {
    $urlRouterProvider.otherwise('/login');
    $stateProvider
        .state('app', {
            abstract: true,
            templateUrl: 'app/main/views/app.html',
            data: {
                requireLogin: true
            }
        })
        // HOME
        .state('app.home', {
            title: 'Home',
            url: '/home',
            templateUrl: 'app/main/views/home.html',
            controllers: ['mainController.js'],
        })

})

.run(['$rootScope', '$location',
    function ($rootScope, $location) {
        $rootScope.location = $location;
        $rootScope.$on('$stateChangeSuccess', function (event, current) {



            var requireLogin = current.data.requireLogin;

             if (requireLogin) {
             event.preventDefault();
             $rootScope.location.path('/login');
             }

        });

    }]);

这是我的用户模块

angular.module('app.user', [])

.config(['$stateProvider', function ($stateProvider) {

    var moduleUrl = 'app/modules/user/';
    var moduleTemplate = 'app/main/views/app.html';
    var moduleName = 'app.user';

    $stateProvider
        .state('user', {
            abstract: true,
            data: {
                requireLogin: true,
            },
            url: '/user',
            templateUrl: moduleTemplate,
            resolve: scriptUtils.getResolved(moduleName, [moduleUrl + 'services/userService.js'])
        })

        .state('user.accueil', {
            title: 'user',
            url: '/accueil',
            templateUrl: moduleUrl + 'views/accueil.html',
            controller: 'userController',
            resolve: scriptUtils.getResolved(moduleName,
                [
                    moduleUrl + 'controllers/userController.js'
                ])
        })
        .state('user.add', {
            title: 'user',
            url: '/add',
            templateUrl: moduleUrl + 'views/add.html',
            controller: 'userController',
            resolve: scriptUtils.getResolved(moduleName,
                [
                    moduleUrl + 'controllers/userController.js'
                ])
        });
}]);

2 个答案:

答案 0 :(得分:0)

  

在某些情况下,运行方法返回异常“未定义   requireLogin“

如果您有一些不包含requireLogin的路线,可能会发生这种情况。为防止这种情况,请先检查data属性中是否包含requireLogin。

var requireLogin = angular.isDefined(current.data) && current.data.requireLogin;

答案 1 :(得分:0)

你所有州都没有requireLogin。

var requireLogin = current.data? current.data.requireLogin:false;