2016-06-24 12 views
3

ich versuche, den Zugang zu einem gewissen Weg zu verhindern, i ui-Router verwenden, und ich angebracht, um ein Datum auf meinen Zustand Objekte, sondernCustom Data State Objekte

unten in einigen Fällen eine Ausnahme „undefiniert requireLogin“ der Lauf Methode retrun

mein Code
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'); 
      } 

     }); 

    }]); 

und das ist mein Modul

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' 
       ]) 
     }); 
}]); 

Antwort

0

in einigen Fällen die Lauf Methode retrun eine Ausnahme " undefined requireLogin“

Dieser Fall passieren können Sie einige Strecken, wo man nicht requireLogin enthalten war. Um dies zu verhindern, überprüfen Sie zuerst, ob requiredLogin in der Eigenschaft data enthalten ist.

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

Ich habe die requireLogin in allen Routen, aber das hat nicht in allen Fällen funktioniert – maha

0

Sie müssen nicht in allen Ihren Staaten anmelden.

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

+0

Ich lege es in den Eltern, so dass automatisch in alle Kinder enthalten sein wird – maha

Verwandte Themen