2016-07-15 31 views
0

我使用此代码强制更改路由(对应于按钮单击)。完整的方法是这样的:Angular 2.0.0-beta.2路由器注入不需要的'?'后缀到路由

submit(){ 
    this.store.dispatch({type: MasterScreenerActions.SUBMIT}); 
    this.router.navigateByUrl('master-screener-results'); 
} 

现在,这个工作得很好,但如果我打回浏览器,然后再次单击submit按钮,浏览器将导航到像这样:Navigated to http://localhost:4200/master-screener-results?。最后注意?。然而,在浏览器最终到达正确的URL后,即/master-screener-results,在重新加载应用程序之后等等。问题是这条路线只打算在填好各种表格之后激活或连接,暗示在master-screener

为什么这种行为以及它是如何发生的? master-screener-results应该是儿童组件吗?我需要实施某种类型的警卫吗?任何意见或提示从哪里开始寻找非常感激。

编辑:我也最终得到?null=on后缀在我的路线后一些摆动......这是什么意思?

EDIT2:此行为似乎发生,当且仅当模板已被以前加载,即zone.js:101 XHR finished loading: GET "http://localhost:4200/app/master-screener-results/master-screener-results.component.html".,下一次调用将导致Navigated to http://localhost:4200/master-screener-results?

回答

1

刚才我与你同样的问题。我曾是这样的:

<form> 
    <input ...> 
    <button (click)="submitForm()">Submit</button> 
</form> 

,代码:

submitForm() { 
    // do something 
    this.router.navigate(["../home"], {relativeTo: this.r}); 
} 

调试我意识到,这只有当我点击一个<button>一个<form>内发生之后,而不是在点击一个<a>;这导致了我的结论,即button的默认操作不被阻止。这个变化可以帮助我:

submitForm() { 
    // do something 
    this.router.navigate(["../home"], {relativeTo: this.r}); 
    return false; // prevent default action 
}