programing

angularjs $location 서비스가 url을 구문 분석하지 않은 것 같습니까?

easyjava 2023. 3. 15. 20:02
반응형

angularjs $location 서비스가 url을 구문 분석하지 않은 것 같습니까?

어플리케이션에서 angular를 사용하고 있습니다.이것은 기본적으로 검색 결과가 있는 테이블입니다.다음 URL을 통해 이 테이블에 액세스할 수 있습니다.http://myapp/?client=clientName

테이블에 대해 각도 컨트롤러가 인스턴스화되며, 특히 모달 대화상자(부트스트랩-ui도 각도 베이스)를 열 수 있습니다.

이러한 행의 자세한 내용은 테이블용과 모달용 양쪽 컨트롤러의 공통 기능을 가진 서비스를 통해 가져옵니다.

이 서비스에서는, 다음의 스니펫을 취득할 수 있습니다.

service.fetchRelatedElements = function(element, cb) {
  var url = '/search.json?results=20&type='+element.type;
  if ($location.search()['client']) {
    url += '&client=' + $location.search('client');
  }
  return doFetch(url, cb); // actual server json GET
};

목표는 테이블에 이미 이 특정 항목이 있는지 확인하는 것입니다.client필터로 설정된 파라미터입니다.

이 콜의 선두에 브레이크 포인트를 붙이면,$location.absUrl()현재 브라우저의 URL을 반환합니다(이 경우는,client관심 있는 파라미터)를 참조해 주세요.

그렇지만$location.search()빈 개체를 반환합니다.

서비스 내 $location 서비스에 디폴트(즉, 에 의해 설정되지 않음)를 삽입하고 있습니다..config()전화) 그리고 의사 선생님 말씀대로:

$location 서비스는 브라우저 주소 표시줄(window.location에 기반)의 URL을 해석하여 응용 프로그램에서 URL을 사용할 수 있도록 합니다.

내가 뭘 빼놓았나요?현시점에서는 URL을 해석해야 하지 않습니까?

감사합니다!


업데이트: 성공적으로 작동했습니다.문제는 서비스를 전혀 설정하지 않았다는 것입니다.그렇게 하면 디폴트가 된다고 생각했기 때문에 그렇게 했습니다만, 그런 식으로 동작하는 것은 아닌 것 같습니다.

설정하기 전에 같은 문제가 발생하고 있었습니다.$locationProvider내 앱의 모듈 구성:

appModule.config(['$locationProvider', function($locationProvider) {
        $locationProvider.html5Mode(true);
    }]);

기본 태그를 지정하지 않으려면 require base false를 지정할 수 있습니다.

myapp.config(function($locationProvider) {
    $locationProvider.html5Mode({
      enabled: true,
      requireBase: false
    });
});

이 문제가 발생했을 때 설정 설정 외에 동작한 것은 쿼리 문자열 앞에 "#"을 추가하는 것입니다.

따라서 사용자가 쿼리 문자열을 작성하면
myapp/?client=clientName
로.
myapp/#?client=clientName

허가된 $location.search()를 사용하여 빈 객체가 아닌 오브젝트를 지정합니다.이 객체는 다음 명령을 사용하여 각 파라미터에 액세스 할 수 있습니다.$location.search()['client']

$location API입니다.검색은 꽤 혼란스럽습니다.부르기

$location.search('client');

검색 개체를 {client: true}(으)로 설정하고 $location을 반환합니다.게다가 오타가 있습니다.client'client'검색을 빈 개체로 설정합니다.따라서 다음과 같은 이점을 얻을 수 있습니다.

url += '&client=' + $location.search()['client'];

$window.location을 구문 분석하는 함수를 작성할 수 있습니다.이 코멘트에 근거해 검색합니다.https://github.com/angular/angular.js/issues/7239#issuecomment-42047533

function parseLocation(location) {
    var pairs = location.substring(1).split("&");
    var obj = {};
    var pair;
    var i;

    for (i in pairs) {
        if (pairs[i] === "")
            continue;

        pair = pairs[i].split("=");
        obj[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
    }

    return obj;
}

$scope.query = parseLocation($window.location.search)['query'];

언급URL : https://stackoverflow.com/questions/16288190/angularjs-location-service-apparently-not-parsing-url

반응형