То, что вы можете использовать, это Resolver , в основном он помогает вам перед фактической маршрутизацией на маршрут обрабатывать то, что вы хотите, прежде чем что-то делать.Поэтому, в основном, добавьте Службу в резольвер, а затем используйте ту же услугу в используемом вами компоненте Меню.
ОБНОВЛЕНИЕ
Как описано в комментариях, что вы можете затем в своемguard просто внедряет вашу службу разрешений, как показано в следующем примере (обратите внимание на службы в конструкторе):
@Injectable()
export class AuthGuardService implements CanActivate {
constructor(private userPermissions: PermissionService, private router: Router) { }
canActivate() {
if (compare(this.userPermissions.permissions, route.config.data.permissions) ) {
return true;
}
return false;
}
private compare(userPermissions:any, routePermissions): boolean {
// compare permissions and return true or false
}
}
Затем, чтобы прочитать разрешения после завершения маршрутизации, используйте службу Router, внедренную в ваш компонент или службу, подобную этой
@Component({
selector: 'app-page1',
templateUrl: './page1.component.html',
styleUrls: ['./page1.component.css']
})
export class Page1Component implements OnInit {
public permissions: Data;
constructor(private route: Router) {
}
ngOnInit() {
this.permissions = this.route.config[1].data.permissions;
}
}
вот стек стека для просмотра в действии