2017-10-16 46 views
0

我想限制使用角度路由在公共目录内的一些页面的访问。

.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(); 
     } 
    }); 
}); 
}); 

但我得到的是这样的错误:

TypeError: next.access is undefined

我如何阅读财产或如何以更好的方式实现这一目标?,谢谢

编辑:

根据建议,我已经改变了代码,它看起来就如下:

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

但没有显示任何东西,我运行调试,可以看到吨帽子实际上正在经历$ routeChangeStart回调,whyyyyy? helppppp!

+0

尝试并检查“下一步”或控制台记录它以查看其内容...即使在那里访问? – floor

+0

我只是在镀铬调试,当我在它悬停它说不确定 – Juanca

+0

实际上是一个对象:PARAMS {},pathParams {},_proto_:对象 – Juanca

回答

0

OK家伙,做,这是做正确的方式:

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)

因为它没有返回值,路由器似乎被卡住等待一个值来解决。