Angular2:如何锁定方法访问?
我的代码中有这样的内容Angular2:如何锁定方法访问?,angular,angular-ui-router,Angular,Angular Ui Router,我的代码中有这样的内容 类AuthenticationGuard实现了CanActivate 异步canActivate(…){ console.log('canActivate….1'); const currentRole=this.settings.getCurrentRole(); if(!currentRole) console.log('canActivate….2'); currentRole=等待此.service.fetchAuthRoleFromServer(url); 在
类AuthenticationGuard实现了CanActivate
异步canActivate(…){
console.log('canActivate….1');
const currentRole=this.settings.getCurrentRole();
if(!currentRole)
console.log('canActivate….2');
currentRole=等待此.service.fetchAuthRoleFromServer(url);
在AuthenticationService中,我有如下内容
类身份验证服务{
构造函数(设置:设置){
sett.initData(…);
在设置类中:
类设置
异步initData(…){
log('initData….1');
const role=wait roleService.getAuthenticated();
log('initData….2');
this.setCurrentRole(角色);
log('initData….3');
日志文件最终看起来像
initData….1
激活
激活
初始化数据…2
初始化数据…3
是否有方法锁定方法this.settings.getCurrentRole()
,直到我至少达到initData….3
(在同一类[settings
]中)
我尝试了一些关于信号量的调查,但不知何故无法让它们运行(在角度上)…要么我安装了错误的软件包,要么…但也许有一个更合适的解决方案
更新:
经过一些研究,我发现这个问题与受保护的路由机制高度相关,事实上,我需要在canActivate中初始化一些数据,我需要检查这些数据是否已经登录。如果没有,则获取内容或移动到登录页。但无论如何,该机制非常奇怪。这对用户有效2/4 您可以将行为主体添加到“initdate”函数(可以是布尔值或数字):
如果您使用Observable,则无法锁定,但可以等待发出数据。请提供相关服务的代码。您是否可以包含更多的代码,谁使用
canActivate
和initDate
,您是否正在等待调用async
调用?
class settings
isInitDone = new BehaviorSubject<boolean>(false);
async initDate(...){
console.log('initData....1');
const role = await roleService.getAuthenticated();
console.log('initData....2');
this.setCurrentRole(role);
console.log('initData....3');
//give a new value to this subject
this.isInitDone.next(true);
}
class Auth...
async canActivate(...) {
console.log('canActivate....1');
this.settings.isInitDone.subscribe(isAvailable => {
if (isAvailable) {
//Do your stuff
}
});