2013-09-30 73 views
1

我試圖使用$ routeProivderAngularjs多級路由

配置角路由所以我

$routeProvider 
.when('/title', { 
templateUrl: 'views/title.html', 
}) 
.when('/title/article-name', { 
templateUrl: 'views/article-name.html', 
}) 

然而,$ locationProvider.html5Mode(真),它會發現頁面模板,但每鏈接圖像js css文件將不會被發現,因此我的佈局被搞砸了(我的頁眉和頁腳在我的index.html中,模板是從ng-view中渲染的)。此外,當我點擊它顯示的鏈接「無法獲取/title/article-name/sample.js」

我的問題是我做的多級路由具有角怎麼辦。

所以像 「www.domain.com/why-us/our-company/our-goal」 類似的東西。由於

+0

如果html5Mode爲false,它可以正常工作嗎?我相信資產會被加載到頁面上,並且與路由配置無關。 – Chandermani

+0

是的,它在html5Mode關閉時工作正常。它會像www.domain.com/#/title/article-name,但我想漂亮的網址。任何想法? – user2770348

回答

1

在設置html5Mode(true)的頂部,您將需要設置服務器,以支持HTML5模式涼爽的URL。見說明從下面official AngularJS documentation

服務器端 使用該模式需要URL重寫,服務器端的,基本上你不得不重寫所有的鏈接到應用程序的入口點(如index.html的)

這意味着你需要將任何靜態資源重定向到應用程序的起點。

比方說,你sample.js是在您的網站www.domain.com的根。

服務器需要重寫的URL,有不同的方法來做到這一點的,這取決於服務器類型您正在使用的服務器端文件指向http://www.domain.com/sample.js,而不是http://www.domain.com/title/article-name/sample.js

。通常的做法是通過前綴爲/static的URL來提供所有靜態資源,並通知服務器重寫該文件夾的所有鏈接。

在客戶端,我看到使用<base href="/" /><head>裏面的一些解決方案。

HTML < base> element指定用於包含在文檔中的所有相對URL的基本URL。

你可以試一下,看看它是否適用於你 - 請記住,因爲在客戶端,you need to see the cross browser support爲此。

我個人建議在服務器端解決方案。

<html> 
     <head> 
     <base href="/" /> 
     </head> 
     .... 
    </html>