0

이전 쿼리 문자열 매개 변수와 동일한 각도 상태를 새 URL로 리디렉션 할 수있는 방법을 이해할 수 있습니까? 내 각도 응용 프로그램이 http://example.com에있는 경우쿼리 문자열을 사용하여 새 서버로 리디렉션하는 각도 라우팅

은 다음 http://example.com/dashboard?id=123&view=test에 대한 모든 요청은 http://test.com/dashboard?id=123&view=test로 리디렉션해야합니다.

다음 코드를 사용하여 내 상태를 어떻게 정의해야합니까?

.state('dashboard', { 
    url: 'domain.com/dashboard', 
    controller: 'DashboardCtrl' 
}) 

컨트롤러에 상태를 전송하고 거기에서 처리하는 몇 가지 트릭을 알고 있습니다. 하지만 다른 컨트롤러에서 반복적 인 코드를 피하기 위해 라우터를 통해 리디렉션하는 방법이 있는지 궁금합니다.

답변

2

A. 각도 1

1 main.route.js :

.state('stateName', { 
    url: 'dashboard', 
    controller: ['$location', '$window', function ($location, $window) { 
    var url = 'domainB.com'; 
    url += $location.$$url; 
    $window.location.href = url; 
    }] 
}) 

B. Angular2/4

,745,

1. app.module.ts : 같은 사용자 지정 공급자를 선언 :

@NgModule({ 
    providers: [ 
    { 
     provide: 'externalUrlResolver', 
     useValue: (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => { 
     window.location.href = `${route.data.externalUrl}${state.url}`; 
     } 
    } 
    ] 
}) 

2. 앱 routing.module.ts : 이제 우리는 외부 리디렉션 할 수있는 사용자 지정 공급자를 사용하여.

http://domainB.com/dashboard?view=list&id=123&visible=yes

:

const APP_ROUTES: Routes = [ 
    { path: 'dashboard', component: AnyComponent, 
    pathMatch: 'prefix', 
    resolve: { url: 'externalUrlResolver' }, 
    data: { externalUrl: 'domainB.com'} 
    } 
] 

입력

http://domainA.com/dashboard?view=list&id=123&visible=yes

이것은로 리디렉션됩니다

+0

감사합니다. @ khichar.anil. 이 작품! 당신의 대답을 수락했습니다. –

1

나는 이것을위한 최선의 해결책은 코드가 이미로드 된 후 브라우저에서 실행되는 Angular가 아니라 서버에 있다고 생각합니다. Apache를 사용하는 경우 example.com에 대한 모든 요청을 test.com으로 리디렉션하는 .htaccess 규칙을 추가하십시오.

.htaccess라는 이름의 파일을 만들고 응용 프로그램 루트 디렉토리에 저장합니다 :

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} ^example\.com$ [NC] 
RewriteRule ^(.*)$ http://test.com/$1 [R=302,L] 

당신은 리디렉션 브라우저와 검색 엔진이 기억에 남는 의미 (영구되고 싶어하고 이전에가는 귀찮게하지 않을 경우 도메인 변경) 302301

이것은 해결책이 아닌 경우 CanActivateChild guard을 사용하여 경로가로드되기 전에 실행해야하는 코드를 나타낼 수 있습니다. 기본 경로의 라우팅 구성에 추가하면 구성 요소 등 ...이 초기화되기 전에이 코드가 항상 실행됩니다. 그 안에는 현재 경로를 읽고 표준 JavaScript로 사용자를 새 도메인으로 리디렉션 할 수 있습니다.

+0

이 서버 수준 설정에 대해 알고 있지만 응용 프로그램 수준 라우팅이 필요한 지금은 응용 프로그램이 클러스터에 있습니다. 서버는 머리가 아프다. –

+1

@NitinKumar 다른 아이디어로 내 대답을 업데이트했습니다 – BeetleJuice

+0

@ khichar.anil이 위에 제안한 답변을 찾고있었습니다. 답변을 주셔서 감사합니다. 서버 레벨 처리를 원하는 사람이라면 upvote를 나에게주는 것과는 달리. –