2017-01-20 8 views
1

Wenn ein Benutzer den Status cloud eingibt, überprüft es, ob eine aktuelle Variable gefunden wird, und wenn es nicht ist, leitet es sie in einen anderen Status um. Aber aus irgendeinem Grund bekomme ich den folgenden Fehler bei der Weiterleitung. Wenn ich direkt zu /neuen gehe, gibt es mir den Fehler nicht. Nur wenn die Weiterleitung erfolgt.Umleitungsstatus: null ist kein Objekt (Bewertung 'Name')

Weiß jemand, was das Problem sein könnte?

.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

haben Sie versucht, zu bewegen 'billable' in' .run() ', anstatt sie in' config' definieren? – aaronmallen

Antwort

0

Die Art und Weise Sie diese konfiguriert haben, glaube ich nicht states noch definiert worden sind, da die Anwendung noch nicht Bootstrap worden. Außerdem werden Routenweiterleitungen wie diese normalerweise in der run-Methode platziert, nicht in der config.

Sie könnten abrechenbar (als Boolean oder was auch immer Sie brauchen) in den Parametern der URL übergeben und darauf basierend umleiten.

heißt

// 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

Danke dafür, ich versuche und benutze einen Service, um meine abrechenbaren param und es scheint nicht im laufenden zu arbeiten. Ich bin ein bisschen verwirrt warum – bryan

Verwandte Themen