2017-01-20 1 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 아직 정의 된 생각하지 않는다. 또한 이와 같은 경로 리디렉션은 일반적으로 config이 아닌 run 방법에 배치됩니다.

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

관련 문제