ng2中如何将某个变量导出全局变量,以便其他模块的调用

在登录后可以获取到当前用户所拥有的权限,如何将权限保存为全局变量,以便其他模块的使用?(暂时不考虑使用storage之类的方法)

阅读 7.5k
评论 2017-09-08 提问
    3 个回答
    风云
    • 2.2k

    使用Service就可以,写一个单独的service去读写用户权限信息,在APPModule中提供,然后在所有的component中都可以使用了。见下面的例子:

    userinfo.service.ts

    import { Injectable } from '@angular/core';
    import { UserInfo } from '../model/user-info.model';
    @Injectable()
    export class UserInfoService {
    
    private  userInfo = new UserInfo();
      constructor() { }
    
      setUserInfo(userInfo: UserInfo) {
        this.userInfo = userInfo;
      }
    
      getUserInfo() {
        return this.userInfo;
      }
    }
    

    在AppModule中通过提供商提供全局的服务
    app.module.ts

    import {BrowserModule} from '@angular/platform-browser';
    import {AppComponent} from './app.component';
    import {UserInfoService} from './service/user.service';
    
    @NgModule({
        declarations: [
            AppComponent,
            LoginComponent
        ],
        imports: [  
            BrowserModule, 
        ],
        providers: [
          UserInfoService
        ],
        bootstrap: [AppComponent]
    })
    export class AppModule {
    }
    

    app.componenet.ts

    import {Component} from '@angular/core';
    import { UserInfo } from '../model/user-info.model';
    @Component({
        selector: 'root',
        templateUrl: './app.component.html',
        styleUrls: ['./app.component.css']
    })
    export class AppComponent {
    
    private  userInfo;
    constructor(private userInfoService:UserInfoService) {
          this.userInfo= this.userInfoService.getUserInfo();
     } 
    }
    
    评论 赞赏 2017-09-09

      使用InjectionToken,放到根模块的providers里,在需要的地方使用DI来获取
      不建议使用全局变量

      评论 赞赏 2017-09-08
        _John
        • 425

        可以使用路由守卫 resolve

        评论 赞赏 2017-09-09
          撰写回答

          登录后参与交流、获取后续更新提醒