Angular 2 - Как перейти на другой маршрут, используя this.router.parent.navigate('/about')

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('[email protected]', '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');

       });
   }
 }

Заранее благодарю вас!

Ответ 1

Маршрутизация абсолютного пути

Существует два метода навигации: .navigate() и .navigateByUrl()

Вы можете использовать метод .navigateByUrl() для абсолютной маршрутизации маршрута:

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

this.router= Router;
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>, чтобы подняться на один уровень, затем переходить и опускать путь к расписанию.

Важные замечания относительно относительной нагурации

Чтобы перемещаться по относительному пути с помощью метода Router.navigate, вы должны предоставить ActivatedRoute, чтобы сообщить маршрутизатору о том, где вы находитесь в текущем дереве маршрутов.

После массива параметров ссылки добавьте объект с свойством relativeTo, установленным в ActivatedRoute. Затем маршрутизатор вычисляет целевой URL на основе активного местоположения маршрута.

От официального Angular Документация маршрутизатора

Ответ 2

Вы должны использовать

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

Помимо указания пути маршрута, вы также можете указать название маршрута:

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

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

Ответ 3

Также можно использовать без parent

скажите определение маршрутизатора как:

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

затем можно перемещаться на name вместо path

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

Обновлено для V2.3.0

В Routing from v2.0 имя свойство больше не существует. маршрут определяют без свойства имя. поэтому вы должны использовать путь вместо name. this.router.navigate(['/path']) и не указывать ведущую косую черту для пути, используйте path: 'about' вместо path: '/about'

определение маршрутизатора:

{path:'about', component: AboutComponent}

затем можно перемещаться по path

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