2013-08-20 1 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에서 실행되기 때문에, URL 이

myapp/#/item/123 
같은 것을이 한

myapp/item/123 

에서 변경

클라이언트 측 라우팅 후 서버 측에서 요청 URL을 받으면 해시 태그 이후의 모든 데이터가 없어져서 어떤 경로를 사용해야하는지 구분할 수 없습니다. URL에서 #을 제거하거나 IE 및 서버 측을 평화롭게 살리기 위해 다른 작업을 수행 할 수 있습니까? 나는 그것을 풀기위한 시도에 실패했다. 감사합니다

답변

2

고객님의 IE 버전은 HTML5 History API을 지원하지 않습니다. 해시를 보내려면 추가 작업을 수행해야합니다 (예 : $routeChangeStart에서 추가 아약스 요청).

+0

이벤트 $ stateChangeStart는이 경우에는 작동하지 않지만 힌트를 주셔서 감사합니다. $ routeChangeSuccess 또는 $ routeChangeStart를 사용하면 문제를 해결하는 데 도움이됩니다. Ajax 요청은 도움이되지 않았지만 쿼리 매개 변수로 리디렉션하고 서버 측에서이 매개 변수를 구문 분석했습니다. 조금 엉망이되어 누군가가 조언을 좀 더 잘 해줄 것입니다 – IgorCh

+0

아 ... 잘못된 이벤트 이름은 유감스럽게 생각합니다. 순수한 AngularJS가 아닌'ui-router'를 사용할 때'$ stateChangeSuccess'를 사용할 수 있습니다. –

관련 문제