2017-01-20 4 views
1

Когда пользователь входит в состояние cloud, он проверяет, найден ли текущая переменная, а если нет, то она перенаправляет их в другое состояние. Но по какой-то причине я получаю следующую ошибку при перенаправлении.Состояние перенаправления: null не является объектом (оценка «имя»)

Если я просто перейду непосредственно к /new, это не даст мне ошибку. Только когда происходит перенаправление.

Кто-нибудь знает, в чем проблема?

.config(function($stateProvider, $urlRouterProvider, $locationProvider) { 

    $locationProvider.html5Mode(true); 
    $urlRouterProvider.otherwise('/cloud'); 

    var billable = ['$rootScope', '$state', function ($rootScope, $state) { 
     if(!$rootScope.billable) $state.go('new'); 
    }]; 

    $stateProvider 

    .state('new', { 
     url: '/new', 
     views: { 'main': { templateUrl: 'pages/templates/new.html', controller: 'new' } }, 
    }) 

    .state('cloud', { 
     url: '/cloud', 
     views: { 'main': { templateUrl: 'pages/templates/cloud.html', controller: 'cloud' } }, 
     onEnter: billable 
    }) 

}) 

Error: null is not an object (evaluating 'name') [email protected]http://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.15/angular-ui-router.js:3953:87 http://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.15/angular-ui-router.js:3924:21 [email protected]http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.js:14720:33 [email protected]http://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.15/angular-ui-router.js:3678:32 http://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.15/angular-ui-router.js:3554:30 [email protected]http://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.15/angular-ui-router.js:474:48 [email protected]http://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.15/angular-ui-router.js:470:33 http://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.15/angular-ui-router.js:449:20 http://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.15/angular-ui-router.js:3557:46 [email protected]http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.js:331:24 [email protected]http://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.15/angular-ui-router.js:3551:16 [email protected]http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.js:13189:29 http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.js:13205:39 [email protected]http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.js:14217:36 http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.js:14440:33 [email protected]http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.js:4905:15 http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.js:5285:33

+0

вы пробовали двигаться '' billable' в .run() 'вместо определения его в' config'? – aaronmallen

ответ

0

Путь у вас есть это настроен, я не верю ни states было еще определено, потому что приложение еще не бутстрапированная. Кроме того, перенаправление маршрута, подобное этому, обычно помещается в метод run, а не в config.

Вы можете передать платный (как логическое или любое другое, что вам нужно) в параметрах URL и перенаправить на основе этого.

т.е.

// I'm assuming you're using UI-Router 
.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', function($stateProvider, $urlRouterProvider, $locationProvider) { 
    $locationProvider.html5Mode(true); 
    $urlRouterProvider.otherwise('/cloud'); 
    $stateProvider 
    .state('new', { 
     url: '/new', 
     views: { 'main': { templateUrl: 'pages/templates/new.html', controller: 'new' } }, 
    }) 
    .state('cloud', { 
     url: '/cloud?billable', 
     views: { 'main': { templateUrl: 'pages/templates/cloud.html', controller: 'cloud' } }, 
    }) 
}]) 
.run(['$rootScope', '$state', function($rootScope, $state) { 
    $rootScope.$on("$stateChangeStart", function(e, toState, toParams, fromState, fromParams) { 
    if (!toParams.billable) { 
     e.preventDefault(); 
     $state.go('new'); 
    } 
    }); 
}]); 
+0

Спасибо за это, я пытаюсь использовать сервис, чтобы захватить мой оплачиваемый параметр, и, похоже, он не работает в перспективе. Я немного смущен, почему – bryan

Смежные вопросы