40

각도로 첫 번째 웹 응용 프로그램을 작성하려고합니다.AngularJS에서 URL 조작 해제

일반 모드 (html5Mode off)에서 Angular는 주소의 해시 부분을 "경로"(선행 "/"추가)로 보이게하고 특수 문자를 인코딩합니다. 예를 들어 하나의 "?" 해시에서 "#"을 선택하고 나머지는 % 3F 및 % 23으로 바꿉니다.

이 기능을 사용 중지 할 수 있나요? $ locationProvider/$ routeProvider 특징 - 해시를 직접 구문 분석하고 싶습니다. (내 경우 사용자가 내 웹 사이트에서 검색 할 때 해시에 "자유 텍스트"를 입력합니다).

내가 (선두에 "/") htmlMode이 켜져있는 경우

, 다음 주소의 해시 부분이 경로처럼 보이도록 강제하지 않습니다 ... routeProvider 정규 표현식을 사용하도록 구성 할 수 없음을 읽어 하지만 여전히 특수 문자를 인코딩합니다.

어쨌든 일부 브라우저는 특수 문자를 인코딩/이스케이프 할 수 있지만 사용자가 주소 표시 줄에 일부 특수 문자를 입력하면 변경하지 않을 것임을 알고 있습니다.

감사

답변

58

이의 부작용이 확실하지,하지만이 일을 가져옵니다. 의도 한 경우에도 각도 앱에서 모든 위치 조작이 사용 중지됩니다.

angular.module('sample', []) 
    .config(['$provide', function ($provide){ 
     $provide.decorator('$browser', ['$delegate', function ($delegate) { 
      $delegate.onUrlChange = function() {}; 
      $delegate.url = function() { return ""}; 
      return $delegate; 
     }]); 
    }]); 

Chrome 30, IE9, IE10에서 테스트되었습니다. 내가 올바르게 기억 https://stackoverflow.com/a/16678065/369724

+0

어, 오래 전이 기능 아이디어를 포기했습니다 ... 기록을 위해 테스트하지는 않았지만 답변을 수락합니다. – Oren

+1

감사합니다. 아마 angularjs 팀의 누군가가이 문제에 걸려 넘어 질 것이고 올바른 방법이 있다고 말해 주길 바랍니다. 이 솔루션은 많은 시행 착오를 겪었고 각도의 소스 코드를 읽기 전에는 발견되지 않았습니다. 고객은 이제 행복해졌습니다. 시간이 지날수록 프레임 워크를 스크랩합니다. 그것은 인상적인 장난감이지만, 배우고 확장하는 것은 비현실적임이 입증되었습니다. –

+1

무한 루프로 연결되는 위치를 조작하는 각도 재 시도. – gronke

1

에서 영감을
는 , 각도의 라우팅은 의무는 아니지만 당신은 내가 angular.js의 로컬 복사본을 사용하는 등, 다시로드 컨트롤러, 뷰의

+2

그것은 필수는 아니지만 항상 켜져 있습니다. 페이지가 있으면 (foo.html # abc)이 페이지가 표시됩니다. 다시로드하면 (foo.html #/abc)가됩니다. 내가 갖고있는 충돌은 pushState (...가 될 때 window.history API에 실패했습니다.); back(); forward(); 왜냐하면 페이지의 angularjs 부분에서 라우팅을 전혀 사용하지 않았지만, 각도가 URL을 대체했기 때문에 앞으로의 역사가 손실되었습니다. –

+0

악마는'src/ng/location.js'에 있습니다. 사용자 정의 앵귤러 빌드를 시도합니다. 이 파일에 대한 참조는'angularFiles.js'에서 제거되어야 Grunt가 파일을 패키징하지 않습니다. 오류를 피하기 위해'$ LocationProvider'에 대한 참조를'src/AngularPublic.js'에서 제거해야한다고 생각합니다. – Adam

6

을주의해야합니다.

$browser.onUrlChange(function(newUrl, newState) { 

$rootScope.$watch(function $locationWatch() { 

주석으로 해당 라인과 AngularJS와 검색은 위치 URL 변경을위한 시계를 중지합니다.

+1

덕분에, angularjs에서 이것을위한 옵션을 만드는 것이 아주 쉬웠을 것입니다. –