【问题标题】:how to use different navbar for different type of user in Angular 5/4?如何在 Angular 5/4 中为不同类型的用户使用不同的导航栏?
【发布时间】:2018-05-01 22:09:49
【问题描述】:

我正在开发一个在 github 上找到的 Angular5 免费模板。它只包含一个导航栏,但就我而言,我有两种类型的用户(管理员和经理),它们根本没有相同的导航栏。我该如何解决这个问题?如何将它们中的每一个重定向到不同的导航栏?

这是模板的样子:

在这张图片中,您可以看到文件 app-sidebar-nav.component.html 使用了包含导航栏的文件 _nav.ts。

这是文件 _nav.ts

我想添加另一个名为 _nav2.ts 的文件,管理员将在身份验证后看到该文件,这是不同的。 _nav.ts 将是管理员在身份验证后看到的结果。

在目录视图/页面中,我有一个名为 login.component.ts 和 login.component.html 的文件

编辑:

这是文件 authentication.service.ts

@Injectable()
export class AuthenticationService{

  private host:string="http://localhost:8080";
  private jwtToken=null ;
  private roles:Array<any>;
  private user:string;
  constructor(private http:HttpClient){

  }
  login(user){

    return this.http.post(this.host+"/login",user,{observe: 'response'});

  }

  getToken(){
    return this.jwtToken;
  }

  isAdmin(){
    for(let r of this.roles){
      if(r.authority=='ADMIN') return true;}
    return false;
  }

isManager(){
    for(let r of this.roles){
      if(r.authority=='MANAGER') return true;}
    return false;
  }
}

【问题讨论】:

    标签: angular angular-ui-router angular5 navbar angular-route-segment


    【解决方案1】:

    您必须在AppSidebarNav 类上添加一个输入属性userType,它可以是adminmanager,稍微更改您的导入,例如:

    import {navigation as adminNav} from './../../_nav';
    import {navigation as managerNav} from './../../_nav2';
    

    并在类中添加一个方法,该方法根据输入返回正确的信息:

    class AppSidebarNav {
        @Input() userType = 'admin';
    
        get navItems(): any[] {
            return this.userType === 'admin' ? adminNav : managerNav;
        }
    }
    

    同时更新您的导航模板以使用 navItems 而不是 navigation(因此它会跳转到新方法)。

    然后您需要更新包含此app-sidebar-nav 的模板以添加新的userType 属性,如下所示: &lt;app-sidebar-nav [userType]="isAdmin ? 'admin' : 'manager'"&gt;&lt;/app-sidebar-nav&gt;

    【讨论】:

    • 非常感谢您的帮助,这对我来说效果很好,但问题是我只有在用户身份验证后才能获取用户类型,我有一个服务:authentication.service.ts ,在身份验证之后,我有一个返回用户类型的方法(我在后端使用具有 spring security 和 jwt 的角色/用户系统),在这种情况下我该怎么做?
    • 我猜您的身份验证服务的代码不完整,对吧?问题是,当您还没有用户信息时,您想如何处理视图,隐藏顶部栏?给经理看一个? ...另一方面,对于需要异步获取的值,更多地使用可观察对象可能会很有趣。 (可能有一些视频可以帮助您入门)
    • 是的,它有点长,所以我只复制了最重要的东西,是的,这就是问题所在,当我还没有用户信息时,我无法处理视图,任何可以帮助我做到这一点的方法,我会使用它,你有什么想法吗?有用的链接?
    • 你可以隐藏栏(如果这是一个选项),你可以添加一个新的类型“未经授权”,它有自己的项目列表(可能/可能是空的),......我想主要是由你决定
    • 啊,我明白了,好的,我会搜索一些关于这种方法的例子,谢谢你的帮助,我很感激:)
    猜你喜欢
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 2019-05-12
    • 2015-09-25
    相关资源
    最近更新 更多