无法在 angular2 中使用 router.nagivate 进行导航

Unable to navigate using router.nagivate in angular2

我正在使用 "angular2": "2.0.0-beta.15"(与 "typescript": "^1.8.10",)并且 AppComponent 是我的主要组件,它只是作为 shell 工作并处理导航:

import {Component} from 'angular2/core';
import { RouteConfig, ROUTER_DIRECTIVES, ROUTER_PROVIDERS } from 'angular2/router';
import {LoginComponent} from "./login/login.component";
import {RegisterComponent} from "./registration/register.component";

@Component({
    selector: 'my-app',
    template: '<router-outlet></router-outlet>',
    directives: [ROUTER_DIRECTIVES],
    providers: [ROUTER_PROVIDERS]
})

@RouteConfig([
    {
        path: '/login',
        name: 'Login',
        component: LoginComponent,
        useAsDefault: true
    },
    {
        path: '/register',
        name: 'Register',
        component: RegisterComponent
    }
])
export class AppComponent {

}

LoginComponentRegisterComponent 都有相互导航的链接。

这就是我尝试导航的方式:

@Component({
   ...
})
export class LoginComponent implements OnInit{

    constructor(private _router: Router) {

    }

    ngOnInit() {
       // some stuffs
    }

    goToRegister(){
        this._router.navigate(['Register']); //also tried this._router.navigate(['/Register']);
    }
}

同样地:

@Component({
   ...
})
export class RegisterComponent implements OnInit{

    constructor(private _router: Router) {

    }

    ngOnInit() {
        // some stuffs
    }

    goToLogin(){
        this._router.navigate(['Login']); // also tried this._router.navigate(['/Login']);
    }
}

但是当我尝试导航时,url 改变了片刻,然后应用程序 重新加载 本身到相同的 page/component。控制台中没有显示任何错误。

改用

this._router.navigate(['/Register'])
this._router.navigate(['/Login'])

如果您从子组件路由。

我也在我正在处理的项目中发现了您在此处看到的相同行为。就我而言,我在 Chrome 和 Safari 中看到了这种行为,但 Firefox 似乎不受影响。

我不确定根本原因,但我触发 router.navigate 的方式是

<button class="btn btn-default" (click)="lookupName()">Lookup</button>

将其更改为

<a class="btn btn-default" (click)="lookupName()">Lookup</a>

为我解决了这个问题。可能不是您正在寻找的答案,但这让我发疯,很高兴这为我解决了问题。

对此进行更多研究,将元素更改为 <a></a> 不太理想,因为它删除了漂亮的表单提交输入功能。我设法在保持与以前相同的功能的同时修复它,希望它对您有所帮助。

我更改了我的模板:

<form class="form-inline">
    <div class="form-group">
       <input type="text" class="form-control" [(ngModel)]="name" placeholder="Name" required>
       <button type="submit" class="btn btn-default" (click)="lookup()">Lookup</button>
    </div>
</form>

看起来像这样:

<form class="form-inline" (ngSubmit)="lookup()">
    <div class="form-group">
        <input type="text" class="form-control" [(ngModel)]="name" placeholder="Name" required>
        <button type="submit" class="btn btn-default">Lookup</button>
    </div>
</form>

这似乎解决了我的问题。看完这个我有了主意:https://angular.io/docs/ts/latest/guide/forms.html