有没有办法尽早执行特定服务?

时间:2019-04-18 10:34:19

标签: angular user-interface service loading

实际上我在Angular中接受一个新项目,当我尝试在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(['']);
                    })
            }
        }));
    }

我希望菜单和标题能够在第一次加载时成功加载我的界面按钮...随时问我更多有关此问题(对不起,我的英语)

1 个答案:

答案 0 :(得分:0)

一段时间后,我终于在另一个组件上解决了问题。
我在服务中使用BehaviorSubject类型创建了属性。
然后在我需要的组件中:
-我将服务属性值分配给组件属性
-在html中,我让ngIf =“ property”。
 不知道是否有更好的方法,但是找不到其他方法,谢谢大家的帮助。