Angular 2-this.router.parent.navigate ( '/ about')를 사용하여 다른 경로로 이동하는 방법?


186

Angular 2 –를 사용하여 다른 경로로 이동하는 방법 this.router.parent.navigate('/about').

작동하지 않는 것 같습니다. 나는 location.go("/about");그것이 효과가 없었던 것처럼 노력 했다.

기본적으로 사용자가 로그인하면 다른 페이지로 리디렉션하고 싶습니다.

아래 코드는 다음과 같습니다.

 import {Component} from 'angular2/angular2';
 import {CORE_DIRECTIVES, FORM_DIRECTIVES} from 'angular2/angular2';
 import {Router} from 'angular2/router';

 import {AuthService} from '../../authService';

 //Model
 class User {
   constructor(public email: string, public password: string) {}
 }

 @Component({
   templateUrl:'src/app/components/todo/todo.html',
   directives: [CORE_DIRECTIVES, FORM_DIRECTIVES]
 })

 export class Todo {   
     model = new User('Mark@gmail.com', 'Password'); 
     authService:AuthService;
     router: Router;

   constructor(_router: Router, _authService: AuthService){   
       this.authService = _authService;
       this.router = _router;
   }

   onLogin = () => {
       this.authService.logUserIn(this.model).then((success) => {      

          //This is where its broke - below:          
          this.router.parent.navigate('/about');

       });
   }
 }

또한 app.ts 파일에서 경로 구성을 다음과 같이 설정했습니다. @RouteConfig ([{path : '/', redirectTo : '/ home'}, {path : '/ home', component : Todo, as : 'Home'}, {경로 : '/ about', 구성 요소 : About, as : 'About'}])
AngularM

/필요하지 않은 경로를 제거해야 합니다
mast3rd3mon

답변:


318

절대 경로 라우팅

탐색에는 두 가지 방법이 .navigate()있으며.navigateByUrl()

.navigateByUrl()절대 경로 라우팅 방법 을 사용할 수 있습니다 .

import {Router} from '@angular/router';

constructor(private router: Router) {}

navigateToLogin() {
   this.router.navigateByUrl('/login');
}

탐색하려는 구성 요소의 URL에 대한 절대 경로를 입력하십시오.

참고 : 라우터의 navigateByUrl메소드를 호출 할 때는 항상 완전한 절대 경로를 지정하십시오 . 절대 경로는 선행으로 시작해야합니다/

// Absolute route - Goes up to root level    
this.router.navigate(['/root/child/child']);

// Absolute route - Goes up to root level with route params   
this.router.navigate(['/root/child', crisis.id]);

상대 경로 라우팅

상대 경로 라우팅을 사용하려면 .navigate()방법을 사용하십시오 .

참고 : 라우팅, 특히 부모, 형제 및 자식 경로가 작동하는 방식은 약간 직관적이지 않습니다.

// Parent route - Goes up one level 
// (notice the how it seems like you're going up 2 levels)
this.router.navigate(['../../parent'], { relativeTo: this.route });

// Sibling route - Stays at the current level and moves laterally, 
// (looks like up to parent then down to sibling)
this.router.navigate(['../sibling'], { relativeTo: this.route });

// Child route - Moves down one level
this.router.navigate(['./child'], { relativeTo: this.route });

// Moves laterally, and also add route parameters
// if you are at the root and crisis.id = 15, will result in '/sibling/15'
this.router.navigate(['../sibling', crisis.id], { relativeTo: this.route });

// Moves laterally, and also add multiple route parameters
// will result in '/sibling;id=15;foo=foo'. 
// Note: this does not produce query string URL notation with ? and & ... instead it
// produces a matrix URL notation, an alternative way to pass parameters in a URL.
this.router.navigate(['../sibling', { id: crisis.id, foo: 'foo' }], { relativeTo: this.route });

또는 현재 경로 경로 내에서 탐색해야하지만 다른 경로 매개 변수로 탐색해야하는 경우 :

// If crisis.id has a value of '15'
// This will take you from `/hero` to `/hero/15`
this.router.navigate([crisis.id], { relativeTo: this.route });

링크 파라미터 배열

링크 매개 변수 배열에는 라우터 탐색을위한 다음과 같은 구성 요소가 있습니다.

  • 대상 구성 요소로의 경로입니다. ['/hero']
  • 라우트 URL로 이동하는 필수 및 선택적 라우트 매개 변수 ['/hero', hero.id]또는['/hero', { id: hero.id, foo: baa }]

디렉토리와 같은 구문

라우터는 경로 이름 조회를 안내하기 위해 링크 매개 변수 목록에서 디렉토리와 같은 구문을 지원합니다.

./ 또는 선행 슬래시가 현재 레벨과 관련이 없습니다.

../ 경로 경로에서 한 수준 위로 올라갑니다.

상대 탐색 구문을 상위 경로와 결합 할 수 있습니다. 형제 경로로 이동해야하는 경우 ../<sibling>규칙을 사용하여 한 수준 위로 올라간 다음 형제 경로 경로 위아래로 이동할 수 있습니다 .

상대 nagivation에 대한 중요 사항

Router.navigate메소드 를 사용하여 상대 경로를 탐색하려면 ActivatedRoute현재 라우트 트리의 현재 위치를 라우터에 제공하기 위해를 제공 해야 합니다.

링크 매개 변수 배열 뒤에 relativeTo속성이로 설정된 객체를 추가 하십시오 ActivatedRoute. 그런 다음 라우터는 활성 경로의 위치를 ​​기준으로 대상 URL을 계산합니다.

공식 Angular Router 문서에서


3
자녀 경로가있는 경우주의하십시오. { path: 'home', component: Home, children: homeRoutes }그런 다음 라우터 방법으로 제공하십시오. this.router.navigate(['home/address-search'])또는this.router.navigateByUrl(/'home/address-search')
Daniel Ram

이것은 좋은 대답이지만 this.router= Router;일부 독자들을 혼란스럽게 할 수 있다는 점을 명심해야합니다 .이 경우 라우터의 의존성 주입에 대한 언급입니다. 대신이 코드를 사용하여 constructor( private router: Router )
만들어야

@siddharta 팁 주셔서 감사합니다, 당신이 그것을 지적 할 때까지 나는 그것을 알아 차리지 못했습니다. 나는 원래 그것을 빨리 작성했고 나중에 그것을 업데이트하려고했지만 잊었다. 이제 적절한 의존성 주입을 사용하도록 예제가 업데이트되었습니다.
TetraDev 2019

@TetraDev 그리고 "this.route"는 어디에서 왔을 까 : D, 그것을 ur 의존성에 추가
Noob

33

사용해야합니다

this.router.parent.navigate(['/About']);

경로 경로를 지정할뿐만 아니라 경로 이름을 지정할 수도 있습니다.

{ path:'/About', name: 'About',   ... }

this.router.parent.navigate(['About']);

1
안녕하세요, 이렇게하면 typescript 컴파일러에서이 오류 메시지가 나타납니다. " 'string'형식의 인수를 any [] 형식의 매개 변수에 할당 할 수 없습니다. String 형식에서 속성 푸시가 누락되었습니다"
AngularM

나는 이것을 시도했지만 작동하지 않았다 : this.router.parent.navigate ( '[/ About]');
AngularM

4
이 구문을 사용해야합니다. this.router.parent.navigate ([ '/ About']); 문자열 '[/ About]'이 아닌 [ '/ About'] 배열을 전달해야합니다
Luca

라우터 3 베타 사용this._router.navigate(['/some-route']);
Adrian Moisa

27

없이도 사용할 수 있습니다 parent

라우터 정의를 말하십시오 :

{path:'/about',    name: 'About',   component: AboutComponent}

다음 name대신에 탐색 할 수 있습니다path

goToAboutPage() {
    this.router.navigate(['About']); // here "About" is name not path
}

V2.3.0 용으로 업데이트

v2.0 이름 에서 라우팅 특성에 더 이상 존재하지 않습니다. 이름 속성 없이 경로를 정의 합니다. 따라서 name 대신 path 를 사용해야합니다 . 그리고 더 슬래시 경로 때문에 사용하지 않는 대신this.router.navigate(['/path'])path: 'about'path: '/about'

라우터 정의 :

{path:'about', component: AboutComponent}

다음으로 탐색 할 수 있습니다 path

goToAboutPage() {
    this.router.navigate(['/about']); // here "About" is path
}

6
nameAngular 2.0의 경로 유형에서는 더 이상 사용되지 않습니다.
RynoRn

Angular 2 v2.3.0에서는 data대신 에을 사용해야합니다 name. 자세한 내용은-> angular.io/docs/ts/latest/guide/router.html
WildDev

8
import { Router } from '@angular/router';
//in your constructor
constructor(public router: Router){}

//navigation 
link.this.router.navigateByUrl('/home');

3
이 코드 스 니펫이 해결책이 될 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 실제로 도움이됩니다. 앞으로 독자들에게 질문에 대한 답변을 제공하므로 해당 사람들이 코드 제안의 이유를 모를 수도 있습니다.
Adam Kipnis

2

개인적으로, 나는 우리가 ngRoutes컬렉션 (긴 이야기)을 유지하기 때문에 가장 즐거움을 느낀다는 것을 발견했습니다.

GOTO(ri) {
    this.router.navigate(this.ngRoutes[ri]);
}

나는 실제로 인터뷰 질문 중 하나의 일부로 사용합니다. 이런 식으로, 나는 누가 GOTO(1)홈페이지 재 지정에 뛰어 들었을 때 누가 삐걱 거리는지를 보면서 영원히 발전하고있는 사람을 거의 즉각적으로 읽을 수있다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.