2017-10-16 14 views
0

角度ルーティングを使用してパブリックディレクトリ内の一部のページへのアクセスを制限しようとしています。

TypeError: next.access is undefined

:私は、私は信じているものを読むしようとしています

.when('/adminprofile', { 
    templateUrl: '../partials/adminprofile.html', 
    access: {restricted: true} 
    }) 

は私が宣言されたプロパティと呼ばれるアクセスである、しかし、私が取得すると、このエラーである

myApp.run(function ($rootScope, $location, $route, AuthService) { 
$rootScope.$on('$routeChangeStart', 
    function (event, next, current) { 
    AuthService.getUserStatus() 
    .then(function(){ 
     if (next.access.restricted && !AuthService.isLoggedIn()){ 
     $location.path('/login'); 
     $route.reload(); 
     } 
    }); 
}); 
}); 

アクセスと呼ばれますどのように私はプロパティを読むことができますか、またはこれをより良い方法でこれを達成することができますか?ありがとう

EDIT:

の提案によると、私は、コードを変更していると、それは次のようになります。

var myApp = angular.module('myApp', ['ngRoute']); 

myApp.config(function ($routeProvider, $locationProvider) { 
$routeProvider 
    .when('/', { 
    templateUrl: '../partials/home.html', 
    resolve: { 
     access: false 
    } 
    }) 
    .when('/home', { 
    templateUrl: '../partials/home.html', 
    resolve: { 
     access: false 
    } 
    }) 
    .when('/login', { 
    templateUrl: '../partials/login.html', 
    controller: 'loginController', 
    resolve: { 
     access: false 
    } 
    }) 
    .when('/logout', { 
    controller: 'logoutController', 
    resolve: { 
     access: false 
    } 
    }) 
    .when('/register', { 
    templateUrl: '../partials/register.html', 
    controller: 'registerController', 
    resolve: { 
     access: false 
    } 
    }) 
    .when('/adminprofile', { 
    templateUrl: '../partials/adminprofile.html', 
    resolve: { 
     access: true 
    } 
    }) 
    .otherwise({ 
    redirectTo: '/' 

    }); 

}); 

そして、私は私の実行機能を持っている:

myApp.run(function ($rootScope, $location, $route, AuthService) { 
debugger; 
$rootScope.$on('$routeChangeStart', 
    function (event, next, current) { 
    AuthService.getUserStatus() 
    .then(function(){ 
     if (next.resolve.access && !AuthService.isLoggedIn()){ 
     $location.path('/login'); 
     $route.reload(); 
     } else{ 
     $location.path($route.current.originalPath); 
     } 
    }); 
}); 
}); 

今私は値を見ることができますアクセスの:

next.resolve.access

しかし、私はデバッグで実行し、 hatは実際には$ routeChangeStartコールバック、whyyyyyを経由していますか? helppppp!

var myApp = angular.module('myApp', ['ngRoute']); 

myApp.config(function ($routeProvider, $locationProvider) { 
$routeProvider 
    .when('/', { 
    templateUrl: '../partials/home.html', 
    resolve: { 
     access: function() { 
      return false; 
     } 
    } 
    }) 
    .when('/home', { 
    templateUrl: '../partials/home.html', 
    resolve: { 
     access: function() { 
      return false; 
     } 
    } 
    }) 
    .when('/login', { 
    templateUrl: '../partials/login.html', 
    controller: 'loginController', 
    resolve: { 
     access: function() { 
      return false; 
     } 
    } 
    }) 
    .when('/logout', { 
    controller: 'logoutController', 
    resolve: { 
     access: function() { 
      return false; 
     } 
    } 
    }) 
    .when('/register', { 
    templateUrl: '../partials/register.html', 
    controller: 'registerController', 
    resolve: { 
     access: function() { 
      return false; 
     } 
    } 
    }) 
    .when('/adminprofile', { 
    templateUrl: '../partials/adminprofile.html', 
    resolve: { 
     access: function() { 
      return true; 
     } 
    } 
    }) 
    .otherwise({ 
    redirectTo: '/' 

    }); 

}); 

myApp.run(function ($rootScope, $location, $route, AuthService) { 
debugger; 
$rootScope.$on('$routeChangeStart', 
    function (event, next, current) { 
    AuthService.getUserStatus() 
    .then(function(){ 
     if (next.resolve.access && !AuthService.isLoggedIn()){ 
     $location.path('/login'); 
     $route.reload(); 
     } 
    }); 
}); 
}); 

決意はそれが値を返していなかったとして

Resolve will open your route with a resolved variable (that can be injected into controller) as soon as it gets value (instantly or when returned promise will be resolved)

機能である必要があり、ルータは思わ:

+0

「次へ」またはコンソールのログを調べて内容を表示しようとしています...そこにもアクセスしていますか? – floor

+0

私はちょうどクロムでデバッグしていましたが、その上にカーソルを置くと定義されていません – Juanca

+0

は実際にオブジェクトです:params {}、pathParams {}、_proto_:Object – Juanca

答えて

0

OK野郎が、これはそれを行うには正しい方法で、行われています解決する価値を待っている。

関連する問題