programing

AngularJS: URL에서 쿼리 파라미터를 클리어하려면 어떻게 해야 합니까?

minimums 2023. 3. 4. 14:25
반응형

AngularJS: URL에서 쿼리 파라미터를 클리어하려면 어떻게 해야 합니까?

마이 앵글JS 응용 프로그램은 사용자의 LinkedIn 프로필에 액세스할 수 있어야 합니다.그러기 위해서는 사용자를 LinkedIn URL로 리다이렉트해야 합니다.이 URL에는 사용자를 웹앱으로 리다이렉트하도록 LinkedIn에 지시하는 callback redirect_uri 파라미터가 포함되어 있습니다.기존 Oauth 2.0 흐름입니다.

Linked In이 사용자를 다음 URL로 리다이렉트하는 것을 제외하고 모든 것이 정상적으로 작동합니다.

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

제거하려고 합니다.?code=XXX&state=YYYURL에서 삭제해 주세요.LinkedIn 리디렉션에서 받은 쿼리 매개 변수를 사용자에게 볼 필요가 없습니다.

나는 노력했다.$location.absUrl($location.path() + $location.hash()).replace()단, 쿼리 파라미터는 URL에 남습니다.

또한 "코드"와 같은 쿼리 매개 변수를 추출할 수 없습니다.($location.search()).code위 URL의 #이전에?가 Angular를 속이고 있는 것 같습니다.

사용하고 있다

$location.search('key', null)

키가 삭제될 뿐만 아니라 URL의 가시화면에서 삭제되기 때문입니다.

Angular에게 답을 받았다.JS 포럼자세한 내용은 이 스레드를 참조하십시오.


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

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

모든 쿼리 파라미터를 삭제하려면 다음 절차를 수행합니다.

$location.search({});

특정 쿼리 파라미터를 1개 삭제하려면 다음 절차를 수행합니다.

$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 를 사용하면 URL 쿼리 문자열을 쉽게 지울 수 있습니다.

$location.search('');

또는

$location.search({});

이렇게 하면 창의 시각적 URL도 변경됩니다.

(각도로 테스트됨)JS 버전1.3.0-rc.1와 함께html5Mode(true).)

다음 경우에 작동시킬 필요가 있습니다.html5mode=false?

다른 모든 답변은 앵글의 답변이 있어야만 유효합니다.html5modetrue밖에서 일하고 있는 경우html5mode,그리고나서$location '라는 것은 안에 ' .$location.search실제 페이지의 검색 매개 변수를 보거나 편집하거나 수정할 수 없습니다.

각도로 로드하기 전에 페이지의 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>

다른 URL로 이동하여 쿼리 파라미터를 클리어하려면 다음 방법만 사용합니다.

$location.path('/my/path').search({});

그냥 사용하다

$location.url();

대신

$location.path();

루트 파라미터를 사용하는 경우 $routeParams를 클리어하기만 하면 됩니다.

$routeParams= null;

위치 해시를 null로 설정하면 어떨까요?

$location.hash(null);

매개변수를 즉시 처리한 후 다음 페이지로 이동하면 새 위치 끝에 물음표를 넣을 수 있습니다.

예를 들어 $location.path('/nextPage');

대신 $location.path('/nextPage?')를 실행할 수 있습니다.

위의 답변을 시도해 봤지만 제대로 작동하지 않았습니다.나한테 유일하게 통했던 암호는$window.location.search = ''

를 이 한할 수 .$location.search({});
을 사용하다

받아들여진 답변은 효과가 있었지만, 뒤로 버튼의 문제를 해결하기 위해 좀 더 깊이 파고들 필요가 있었습니다.

가 깨달은 것은, 이 하면, 이 에 할 수 것입니다.<a ui-sref="page({x: 1})">를 사용하여 쿼리 $location.search('x', null)브라우저 이력에는 추가 엔트리가 없기 때문에 뒤로 버튼을 클릭하면 원래 위치로 돌아갑니다.Angular가 이 이력 엔트리를 자동으로 삭제해서는 안 된다고 생각하기 때문에 잘못된 것 같습니다만, 실제로 이것은 제 특정 사용 사례에 대해 바람직한 동작입니다.

는 이 <a href="/page/?x=1">대신 동일한 방법으로 쿼리 문자열을 삭제하면 브라우저 기록에 추가 항목이 표시되므로 원래 위치로 돌아가려면 뒤로 버튼을 두 번 클릭해야 합니다.이것은 일관성이 없는 행동이지만, 실제로는 이것이 더 올바른 것 같습니다.

할 수 요.href(')를 하여 링크합니다.$location.search('x', null).replace()ui-sref링 、 그 、 까 、 까 、 그아 。

여러 번 만지작거린 끝에 내가 생각해낸 해결책은 다음과 같다.

앱의 ★★★★★★★run기능을 했습니다.

$rootScope.$on('$locationChangeSuccess', function () {
    $rootScope.locationPath = $location.path();
});

그런 다음 다음 다음 코드를 사용하여 쿼리 문자열 매개 변수를 삭제합니다.

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

if ($location.path() === $rootScope.locationPath) {
    $location.replace();
}

언급URL : https://stackoverflow.com/questions/17376416/angularjs-how-to-clear-query-parameters-in-the-url

반응형