[angularjs] AngularJS : URL에서 쿼리 매개 변수를 지우는 방법은 무엇입니까?

내 AngularJS 응용 프로그램은 사용자의 LinkedIn 프로필에 액세스 할 수 있어야합니다. 그렇게하려면 콜백 redirect_uri 매개 변수가 포함 된 LinkedIn URL로 사용자를 리디렉션해야합니다.이 매개 변수는 LinkedIn에 사용자를 다시 webapp로 리디렉션하고 URL에 “코드”쿼리 매개 변수를 포함하도록 지시합니다. 전통적인 Oauth 2.0 흐름입니다.

LinkedIn이 사용자를 다음 URL로 다시 리디렉션한다는 점을 제외하면 모든 것이 잘 작동합니다.

http://localhost:8080/?code=XXX&state=YYY#/users/123/providers/LinkedIn/social-sites

?code=XXX&state=YYYURL을 깨끗하게 만들기 위해 URL에서 삭제 하고 싶습니다 . 사용자는 LinkedIn 리디렉션에서받은 쿼리 매개 변수를 볼 필요가 없습니다.

을 시도 $location.absUrl($location.path() + $location.hash()).replace()했지만 URL에 쿼리 매개 변수가 유지됩니다.

또한을 사용하여 검색어 매개 변수 (예 : “code”)를 추출 할 수 없습니다 ($location.search()).code. 있는 것 같아요? 위의 URL에서 # 전에는 Angular를 속입니다.



답변

나는 사용한다

$location.search('key', null)

이것은 내 키를 삭제 할뿐만 아니라 URL의 가시성에서 제거합니다.


답변

AngularJS 포럼에서 답변을 얻었습니다. 자세한 내용은 이 스레드 를 참조하십시오


링크는 읽기가 어렵고 명확한 답변을 제공하지 않는 Google 그룹스 스레드로 연결됩니다. URL 매개 변수를 제거하려면

$location.url($location.path());


답변

모든 쿼리 매개 변수 를 제거하려면 다음을 수행하십시오.

$location.search({});

하나의 특정 쿼리 매개 변수 를 제거하려면 다음을 수행하십시오.

$location.search('myQueryParam', null);


답변

항목을 지우려면 해당 항목을 삭제하고 $$ compose를 호출하십시오.

    if ($location.$$search.yourKey) {
        delete $location.$$search.yourKey;
        $location.$$compose();
    }

angularjs 소스에서 파생 : https://github.com/angular/angular.js/blob/c77b2bcca36cf199478b8fb651972a1f650f646b/src/ng/location.js#L419-L443


답변

다음을 사용하여 특정 쿼리 매개 변수를 삭제할 수 있습니다.

delete $location.$$search.nameOfParameter;

또는 검색을 빈 개체로 설정하여 모든 쿼리 매개 변수를 지울 수 있습니다.

$location.$$search = {};


답변

이전 @Bosh 언급으로 글을 쓰는 시점에서, 그리고 html5mode해야 true설정할 수하기 위해$location.search() 그리고 그것은 다시 윈도우의 시각적 URL에 반영 될 수 있습니다.

참조 https://github.com/angular/angular.js/issues/1521를 을 .

그러나 경우가 html5mode 있습니다true 쉽게와 URL의 쿼리 문자열을 지울 수 있습니다 :

$location.search('');

또는

$location.search({});

또한 창의 시각적 URL이 변경됩니다.

(AngularJS와 버전에서 테스트 1.3.0-rc.1html5Mode(true).)


답변

html5mode= 때 작동하도록해야 false합니까?

다른 모든 답변 html5mode은 Angular ‘s 가 인 경우에만 작동합니다 true. 당신이 외부로 작업하는 경우 html5mode, 다음 $location등 -에만 해시 생활하는 “가짜”위치를 참조 $location.search볼 수 없습니다 / 편집 / 실제 페이지의 검색 PARAMS를 해결.

각도로드 전에 페이지의 HTML에 삽입되는 해결 방법은 다음과 같습니다 .

<script>
  if (window.location.search.match("code=")){
    var newHash = "/after-auth" + window.location.search;
    if (window.history.replaceState){
      window.history.replaceState( {}, "", window.location.toString().replace(window.location.search, ""));
    }
    window.location.hash = newHash;
  }
</script>