Перенаправлення всередині компонента Angular 2


76

У мене є простий метод, який в кінці його я хочу перенаправити на інший компонент:

export class AddDisplay{
  display: any;

  addPairTo(name: string, pairTo: string){
    this.display = {};
    this.display.name = name;
    this.display.pairTo = pairTo;

  }
}

Що я хочу зробити, це в кінці методу перенаправити на інший компонент:

export class AddDisplay{
  display: any;

  addPairTo(name: string, pairTo: string){
    this.display = {};
    this.display.name = name;
    this.display.pairTo = pairTo;

    this.redirectTo('foo');
  }
}

Як мені досягти цього в Angular 2?


Я можу лише думати про маршрутизацію. Це можна зробити за допомогою навігації
Ерік Мартінес

Відповіді:


95

спочатку налаштуйте маршрутизацію

import {RouteConfig, Router, ROUTER_DIRECTIVES} from 'angular2/router';

і

@RouteConfig([
  { path: '/addDisplay', component: AddDisplay, as: 'addDisplay' },
  { path: '/<secondComponent>', component: '<secondComponentName>', as: 'secondComponentAs' },
])

потім у імпорті компонента, а потім ін’єктуйте маршрутизатор

import {Router} from 'angular2/router'

export class AddDisplay {
  constructor(private router: Router)
}

останнє, що вам потрібно зробити, це зателефонувати

this.router.navigateByUrl('<pathDefinedInRouteConfig>');

або

this.router.navigate(['<aliasInRouteConfig>']);

FYI: navigateByUrlне приймає масив. Лише один рядок.
Бен Тілкер

1
Як перезавантажити подання? navigateі, navigateByUrlздається, змінює зміну URL-адреси, але компоненти, прив'язані до маршруту, не перезавантажуються.
dopatraman

9
Примітка: Ця відповідь стосується бета-версії або версії-кандидата на випуск Angular 2 і більше не застосовується до Angular 2 final.
jbandi

6

Відповідь @ kit - це нормально, але не забудьте додати ROUTER_PROVIDERSпостачальників у компонент. Потім ви можете перенаправити на іншу сторінку в ngOnInitметоді:

import {Component, OnInit} from 'angular2/core';
import {Router, ROUTER_PROVIDERS} from 'angular2/router'

@Component({
    selector: 'loginForm',
    templateUrl: 'login.html',
    providers: [ROUTER_PROVIDERS]
})

export class LoginComponent implements OnInit {

    constructor(private router: Router) { }

    ngOnInit() {
        this.router.navigate(['./SomewhereElse']);
    }

}

23
Примітка: Ця відповідь стосується бета-версії або версії-кандидата на випуск Angular 2 і більше не застосовується до Angular 2 final.
jbandi

2
@jbandi, чи не могли б Ви дати, будь ласка, оновлену відповідь?
Гюго,

4

Це працювало для мене Angular cli 6.x:

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

constructor(private artistService: ArtistService, private router: Router) { }

  selectRow(id: number): void{
       this.router.navigate([`./artist-detail/${id}`]);

  }

1
callLog(){
    this.http.get('http://localhost:3000/getstudent/'+this.login.email+'/'+this.login.password)
    .subscribe(data => {
        this.getstud=data as string[];
        if(this.getstud.length!==0) {
            console.log(data)
            this.route.navigate(['home']);// used for routing after importing Router    
        }
    });
}

Привіт PYRO BUG, ​​ласкаво просимо. Будь ласка, додайте пояснення.
Тіаго Мартінс Перес 李大仁
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.