有没有办法在 angular 早期执行特定服务?
Is there a way to execute a specific service early in angular?
实际上在 Angular 中进行了一个新项目,当我尝试加载 header 和 app.component 文件中的菜单时发现了一个问题。看起来它们没有完全加载或者它们没有与所需的服务通信。一个函数正在检查是否允许用户查看某些界面按钮,但如果不重新加载它就无法工作(是的,在页面重新加载后它可以工作)。不明白失败的原因。
尝试设置条目组件数组中的组件但不起作用。
检查权限的函数
isAllow (action) {
let checked = false;
if( localStorage.getItem ('allow')){
let stored = JSON.parse(atob(localStorage.getItem('allow')))['permissions'];
if(stored.includes(action))checked=true;
}
return checked;
}
如何在我的 app.component
中调用这些组件
<app-header></app-header>
<div id="main" class="grey lighten-4">
<div class="wrapper">
<app-breadcrumb></app-breadcrumb>
<app-alert></app-alert>
<router-outlet></router-outlet>
<app-menu></app-menu>
</div>
</div>
<app-footer></app-footer>
login (username: string, password: string) {
return this.http.post<any>(Config.apiUrl + '/oauth', { grant_type: 'password', username: username, password: password, client_id: username }, httpOptions)
.pipe(map((res:any) => {
if (res && res.access_token) {
localStorage.setItem('currentAuth', btoa(JSON.stringify(res)));
var user:any = {"username":username};
localStorage.setItem('user', btoa(JSON.stringify(user)));
this.currentToken = res.access_token;
this.user.getAccountById(res.account_id).subscribe(e=>{
localStorage.removeItem('allow');
localStorage.setItem('allow',btoa(JSON.stringify({'id':res.account_id,'permissions':(e['type']==1?['1','2','3','4','5','6','7','8','9','10','11','12']:(e['levels']!=null?e['levels']:['0'])),'type':e['type'],'id_client':e['id_client']})));
this.loggedIn.next(true);
this.router.navigate(['']);
})
}
}));
}
我希望菜单和 header 能够在第一次加载时成功加载我的界面按钮...请随时向我询问更多相关信息(对不起我的英语)
我在另一个组件上花了一段时间终于解决了这个问题。
我在我的服务中创建了 BehaviorSubject 类型的属性。
然后在我需要的组件中:
-我将服务属性值分配给组件属性
-在 html 我让 ngIf="property".
不知道有没有更好的方法但是没找到,谢谢大家的帮助顺便说一下。
实际上在 Angular 中进行了一个新项目,当我尝试加载 header 和 app.component 文件中的菜单时发现了一个问题。看起来它们没有完全加载或者它们没有与所需的服务通信。一个函数正在检查是否允许用户查看某些界面按钮,但如果不重新加载它就无法工作(是的,在页面重新加载后它可以工作)。不明白失败的原因。
尝试设置条目组件数组中的组件但不起作用。
检查权限的函数
isAllow (action) {
let checked = false;
if( localStorage.getItem ('allow')){
let stored = JSON.parse(atob(localStorage.getItem('allow')))['permissions'];
if(stored.includes(action))checked=true;
}
return checked;
}
如何在我的 app.component
中调用这些组件<app-header></app-header>
<div id="main" class="grey lighten-4">
<div class="wrapper">
<app-breadcrumb></app-breadcrumb>
<app-alert></app-alert>
<router-outlet></router-outlet>
<app-menu></app-menu>
</div>
</div>
<app-footer></app-footer>
login (username: string, password: string) {
return this.http.post<any>(Config.apiUrl + '/oauth', { grant_type: 'password', username: username, password: password, client_id: username }, httpOptions)
.pipe(map((res:any) => {
if (res && res.access_token) {
localStorage.setItem('currentAuth', btoa(JSON.stringify(res)));
var user:any = {"username":username};
localStorage.setItem('user', btoa(JSON.stringify(user)));
this.currentToken = res.access_token;
this.user.getAccountById(res.account_id).subscribe(e=>{
localStorage.removeItem('allow');
localStorage.setItem('allow',btoa(JSON.stringify({'id':res.account_id,'permissions':(e['type']==1?['1','2','3','4','5','6','7','8','9','10','11','12']:(e['levels']!=null?e['levels']:['0'])),'type':e['type'],'id_client':e['id_client']})));
this.loggedIn.next(true);
this.router.navigate(['']);
})
}
}));
}
我希望菜单和 header 能够在第一次加载时成功加载我的界面按钮...请随时向我询问更多相关信息(对不起我的英语)
我在另一个组件上花了一段时间终于解决了这个问题。
我在我的服务中创建了 BehaviorSubject 类型的属性。
然后在我需要的组件中:
-我将服务属性值分配给组件属性
-在 html 我让 ngIf="property".
不知道有没有更好的方法但是没找到,谢谢大家的帮助顺便说一下。