2017-06-16 74 views
0

當我嘗試從地址欄打開Angular 2路由時,我不斷收到http 404響應,但是使用帶有「routerLink」指令的錨點導航到路由的工作沒有問題。我試圖按照Angular's Deployment Guide中的說明修改我的web.config文件以進行url重寫,但這通常會完全破壞我的路由。最後,我在我的index.html文件中包含了<base href="/">,但這也沒有幫助。我們非常感謝社區的任何幫助!Angular 2路由 - 從地址欄打開鏈接

這裏是我的路由組件代碼:

import { NgModule } from '@angular/core'; 
import { RouterModule, Routes } from '@angular/router'; 
import { ClientsComponent } from './clients.component'; 

const routes: Routes = [ 

    { path: 'clients', component: ClientsComponent }, 
    //^This does not work from address bar, only from routerLinks. 
    { 
     path: '**', 
     redirectTo: '', 
     pathMatch: 'full' 
    }, 
]; 

@NgModule({ 
    imports: [RouterModule.forRoot(routes)], 
    exports: [RouterModule] 
}) 

export class AppRoutingModule { } 
+0

您可以輕鬆地說解決了使''#基於路由這個問題'[RouterModule.forRoot(路線,{useHash:真})]'如果你不需要'html5mode'路由 –

+0

謝謝Pankaj,這個工作,但我不希望在我的網站上有#符號。看起來像一個「哈克」解決方法。這是Angular 2和IIS的一個已知問題嗎? – DotNetDev

+0

不,這可以發生在任何服務器..不專門與IIS。你必須配置你的服務器來處理這樣的請求..我可以知道你使用'systemjs' /'weback'的模塊加載器嗎? –

回答

1

嘗試設置usehash爲真,這應該解決您的問題。

RouterModule.forRoot(routes, { useHash: true }) 
+1

謝謝Mani,Panaj在他的評論中也表達了同樣的觀點。這個解決方案的工作原理,但我不希望在我的網站上有#符號。 – DotNetDev

+0

因爲我找不到更好的解決方案,所以最終啓用了「useHash」。謝謝! – DotNetDev