Angular 2.0.0-beta.2路由器注入不需要的'?'后缀进入路线

时间:2016-07-15 05:54:24

标签: angular angular2-routing

我正在使用此代码强制更改路线(对应按钮)。完整的方法如下所示:

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。问题是此路由仅用于在填写各种表单后激活或连接,暗示{ {1}}。

为什么会出现这种行为以及它是如何发生的? master-screener应该是儿童成分吗?我需要实施某种类型的警卫吗?任何有关从哪里开始寻找的建议或提示都非常感谢。

编辑:经过一番摆弄后,我的路线上也会得到一个master-screener-results后缀......这是什么意思?

edit2:当且仅当先前已加载模板时,才会出现此行为,即?null=on,下次调用将导致zone.js:101 XHR finished loading: GET "http://localhost:4200/app/master-screener-results/master-screener-results.component.html".

1 个答案:

答案 0 :(得分: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
}