2013-08-20 66 views
0

我有以下問題。在客戶端我有角路由,這樣的事情:Angularjs,從IE中刪除#url

... 
$locationProvider.html5Mode(true); 
    $routeProvider. 
     when('/item/:item_id', { reloadOnSearch: false, templateUrl: '/views/main/partials/_item.html', controller: ItemCtrl }). 
     otherwise({redirectTo: '/login'}); // Default 
... 

和PHP服務器端的一些路由

$req=$_SERVER['REQUEST_URI']; 
if(strpos($req,'/login') > -1){ 
    include __DIR__.'/../views/login/index.php'; 
} else if(strpos($req,'/item/') > -1) { 
    include __DIR__.'/../views/item/index.php'; 
else { 
    include __DIR__.'/../views/login/index.php'; 
} 

以外的所有IE的偉大工程,因爲當客戶端路由在IE中執行,網址從這個

myapp/item/123 

改變這樣的事情

myapp/#/item/123 

當服務器端在客戶端路由後收到這種請求url時,哈希標記後的所有數據都消失了,我無法區分應該使用哪條路由。我可以從網址中刪除#,或者做其他事情讓IE和服務器端和平生活?我試圖解決它失敗了。謝謝

回答

2

您的IE版本不支持HTML5 History API。要發送散列,你應該做一些額外的工作,例如在$routeChangeStart上做額外的ajax請求。

+0

事件$ stateChangeStart在這種情況下不起作用,但感謝提示,我使用$ routeChangeSuccess或$ routeChangeStart,它有助於解決問題。 Ajax請求沒有幫助,但我使用查詢參數重定向並在服務器端解析這些參數。這有點難看,或許有人會提出更好的建議 – IgorCh

+0

呃......對於錯誤的事件名稱我很抱歉,使用'ui-router'時不提供'$ stateChangeSuccess',而不是純粹的AngularJS。 –