【问题标题】:Redirect within component Angular 2在组件 Angular 2 中重定向
【发布时间】:2015-12-30 00:41:24
【问题描述】:

我有一个简单的方法,最后我想重定向到另一个组件:

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 中实现这一点?

【问题讨论】:

  • 我只能想到路由。你可以用navigate

标签: javascript angular


【解决方案1】:

先配置路由

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>']);

【讨论】:

  • 仅供参考:navigateByUrl 不接受数组。只是一个字符串。
  • 如何重新加载视图? navigatenavigateByUrl 似乎改变了 url 但绑定到路由的组件没有重新加载。
  • 注意:此答案针对 Angular 2 的 beta 或候选发布版本,不再适用于 Angular 2 final。
【解决方案2】:

@kit 的回答是可以的,但是记得在组件中添加ROUTER_PROVIDERS 到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']);
    }

}

【讨论】:

  • 注意:此答案针对 Angular 2 的 beta 或候选发布版本,不再适用于 Angular 2 final。
  • @jbandi 你能提供一个更新的答案吗?
【解决方案3】:

这对我有用 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}`]);

  }

【讨论】:

    【解决方案4】:
    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,欢迎。请考虑添加解释。
    猜你喜欢
    • 1970-01-01
    • 2017-02-14
    • 2017-01-03
    • 2016-09-12
    • 1970-01-01
    • 2017-07-04
    • 2017-06-02
    • 2016-11-18
    • 2017-02-11
    相关资源
    最近更新 更多