2016-07-15 32 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 
}