2015-12-04 117 views
-1

我想設置由angular.js路由的可訪問和可加入書籤的URL。angular.js url路由和html5Mode(true)

的應用僅僅是一個通過http://example.com/application/

無論發生什麼事之後/application/是一個路由PARAM訪問整個網站的一部分。

現在我想有一個可以通過

http://example.com/application/#/filter1/filter2/filter3/ 
          ^hashbang here 

http://example.com/application/filter1/filter2/filter3/ 
          ^no hashbang here 

訪問或者是URL,我會想到angular.js我的路線PARAMS傳遞給我的應用程序,而是其他方面,我會得到通過。

基本路線設置

$locationProvider.html5Mode(true); // this requires base-tag to be set in dom, 
            // but doesnt work for me 

$routeProvider 
    .when('/application/:filter1/:filter2/:filter3', { 
     action: 'filter', 
     reloadOnSearch: false 
    }) 
    .otherwise({ 
     redirectTo: '/application/' + filter1 + '/' + filter2 + '/' + filter3 
    }); 

在該應用程序的HTML我把<base href="/application/" />,這似乎是做工精細,而且重新加載頁面或再次訪問它,它通過。否則去了以後 - 路由不起作用,服務器顯示「找不到頁面」。

當我禁用HTML5模式和卸下底座標籤,它不工作,要麼和我打通。否則

+0

您的服務器有責任在/ application /和/ application/filter1/filter2/filter3/requests上使用相同的頁面進行響應,但您沒有在服務器端提供任何詳細信息。 – estus

+0

好的,但如何使用hashbang路由?也不工作 - 相反,它需要.otherwise路線 – Manticore

回答

1

這是因爲你的服務器知道application/路由(和返回也許application.html),但不application/filter1/filter2/filter3/(因爲filter3.html不存在)。

您可以:

  • 決定僅使用哈希語法(在#之前服務器讀取的一切,讓瀏覽器(在你的情況下,角)後,管理一切
  • 設置你的。服務器使所有以application/*返回到瀏覽器application.html啓動路徑

而且我認爲你需要從路由提供商卸下底座:

$routeProvider 
.when('/:filter1/:filter2/:filter3', { 
    action: 'filter', 
    reloadOnSearch: false 
}) 
.otherwise({ 
    redirectTo: '/' + filter1 + '/' + filter2 + '/' + filter3 
}); 
+0

到目前爲止感謝。我不想觸摸服務器設置。取而代之的角度應該採取#之後的所有內容,並將其用作參數,但事實並非如此,而是我沒有定義charAt(d)。當我調試一點我得到$$解析沒有baseUrl左右似乎關心hashbang並在我的情況下失敗 – Manticore

+0

@Manticore我正在編輯我的答案 – squaleLis

+0

感謝squaleLis,我已設置網址重寫爲哈希,現在它工作得很好! – Manticore