Angular BehaviorSubject Подписаться.Вызов метода в компоненте после входа и выхода пользователя - PullRequest
0 голосов
/ 05 декабря 2018

У меня угловая раскладка с верхним и нижним колонтитулом.Я хочу обновить загрузку навигационных меню в зависимости от роли пользователя, например, только для чтения или аналитика.Я увидел пост здесь на SO и скопировал код BehaviorSubject для компонента заголовка, чтобы подписаться на логическое изменение в сервисе.Это работает, но я получил только одну кнопку входа, чтобы перейти на кнопку выхода.В моем коде компонента заголовка есть метод, который будет загружать меню в зависимости от роли пользователя.Он берет список путей к меню и загружает только те пункты меню, которые соответствуют роли пользователя.Таким образом, в дополнение к использованию *ngIf для изменения скрытой базы при изменении подписанного логического значения, есть ли способ вызвать метод из подписанного изменения, когда компонент заголовка уведомлен о произведенном изменении?

Любойпомощь приветствуется.Спасибо.

Вот мой код компонента заголовка до сих пор:

export const ROUTES: RouteInfo[] = [
  { path: '/Home', title: 'Home', icon: '', class: '', role: 'all'},

  // admin
  { path: '/change-role', title: 'Change Role', icon: '', class: '', role: 'admin'},
  { path: '/users', title: 'User', icon: '', class: '', role: 'admin'},
  { path: '/products', title: 'products', icon: '', class: '', role: 'admin'},
  { path: '/admin', title: 'Admin', icon: '', class: '', role: 'admin'},
];

  constructor(private dataSharingService: DataSharingService, private loginService: LoginService, private router : Router)  { 
      this.dataSharingService.isUserLoggedIn.subscribe( value => { this.isUserLoggedIn = value })
  }

  ngOnInit() {
    //this.getLoginStatus();
    this.loadMenus();

  }

  loadMenus()
  {
      var role = this.loginService.getUserRole();
      if (role == 'admin') {
        this.menuItems = ROUTES.filter(menuItem => menuItem.role == 'admin');
      }
      else if (role == 'analyst' || role == 'reviewer') {
        this.menuItems = ROUTES.filter(menuItem => menuItem.role == 'reviewer');
      }
      else if (role == ' readOnly') {
        this.menuItems = ROUTES.filter(menuItem => menuItem.role == 'readOnly');
      }

    }
  } 

1 Ответ

0 голосов
/ 05 декабря 2018

Полагаю, это то, что вы хотите сделать.

this.dataSharingService.isUserLoggedIn.subscribe(value => {
  this.isUserLoggedIn = value;
  this.loadMenus();
});
...