5

@NgModule을 통해 라우트 구성을 설정했습니다. 그리고 특정 조건에 따라 사용자가 표시해야하는 응용 프로그램의 부분을 식별하는 서비스가 있습니다. 그 서비스를 호출하고 반환 된 값에 따라 경로를 설정해야합니다.각도 : 서비스 방법 호출에 따라 경로 설정

문제점 : 라우트 구성이 주석 내부에 설정되어 있으며 이러한 설정에서 서비스 호출 방법을 얻을 수 없습니다.

좀 더 구체적으로 설명하면 다음과 같습니다.

내 현재 라우팅 설정 :

const appRoutes: Routes = [ 
    { 
     path: '', 
     redirectTo: 'first-route', 
     pathMatch: 'full' 
    }, 
    { 
     path: 'first-route', 
     component: FirstComponent, 
     pathMatch: 'full' 
    }, 
    { 
     path: 'second-route', 
     component: SecondComponent, 
     pathMatch: 'full' 
    }, 
    ... 
]; 

@NgModule({ 
    imports: [RouterModule.forChild(appRoutes)], 
    exports: [RouterModule] 
}) 
export class MyRoutingModule { 
} 

경로 설정을 변경해야합니다 서비스 :

@Injectable() 
export class MyService { 
    getAccessibleRoutes(): Observable<string[]> {...} 
} 

는 질문 :가 어떻게 서비스 요청을하고 경로를 변경할 수 있습니다?

참고 : 나는 또한 "Dynamically adding routes in Angular""How we can add new routes dynamically into RouterModule(@NgModule imports)"을 보았지만 확실한 대답을 찾지 못했습니다.

답변

2

문제를 올바르게 이해했다면 목표를 달성하기 위해 경로 가드 사용을 고려해보십시오. 경로 목록을 변경하는 대신 경로에 액세스하는 조건을 지정하기 위해 보호 기능을 사용하는 것이 좋습니다.

경로 경비에 대한 자세한 내용은이 링크를 확인하십시오 :

https://codecraft.tv/courses/angular/routing/router-guards/

나는이 당신을 도움이되기를 바랍니다.

import { Injectable } from '@angular/core'; 
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; 
import { YourSecurityService } from './your-security.service'; 

@Injectable() 
export class YourRouteGuardService implements CanActivate { 

    constructor(
     private router: Router, 
     private yourSecurityService: YourSecurityService) { 
    } 

    canActivate(
     route: ActivatedRouteSnapshot, 
     state: RouterStateSnapshot): boolean { 

     console.log(state.url); // HERE YOU CAN GET REQUESTED ROUTE 

     if (this.yourSecurityService.checkIfUserHaveAccess()) 
      return true; 

     this.router.navigate(['your-route-to-redirect']); 
     return false; 
    } 
} 

다음 당신은 당신의 경로에 가드를 적용해야합니다 :

const appRoutes: Routes = [ 
    { 
     path: 'someroute', 
     component: RouteComponent, 
     canActivate: [YourRouteGuardService] 
    }, 
    ... 
] 
+0

호 I 설정 할'redirectTo'을 라우터 가드? 예를 들어'first-route'가 사용자가 접근 할 수 없다는 것을 알고 있다면'second-route'로 리디렉션을 변경하고 싶습니다. –

+0

업데이트 된 답변을 확인하십시오. 여기서 활성화 조건이 충족되지 않는 경우 Guard의 다른 경로로 리디렉션하는 방법의 예를 찾을 수 있습니다. –

+0

@OleksandrShpota 초기 접근 방식은 인앱 로직을 기반으로하는 경로 구성을 동적으로 변경하는 것 같습니다. 더 정확한 접근법은 전체 라우터 구성을 선행 적으로 정의하고 인앱 데이터를 기반으로 각 경로에 대한 접근성을 제한하기 위해 Route Guards를 사용하는 것입니다. 자세한 내용은 각도 문서를 참조하십시오 https://angular.io/guide/router # canload-guard-guarding-unauthorized-of-feature-modules- – tt9