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
'programing' 카테고리의 다른 글
| TypeScript 컴파일러 Array.protype을 확인하는 방법.필터가 어레이에서 특정 유형을 제거합니까? (0) | 2023.03.15 |
|---|---|
| Objective-C용 JSON 파서 비교(JSON Framework, YAJL, TouchJSON 등) (0) | 2023.03.15 |
| AngularJS: 템플릿 내에서 변수를 설정하려면 어떻게 해야 합니까? (0) | 2023.03.15 |
| 엔티티 프레임워크를 사용한ID 생성 및 자동 증분 방법 (0) | 2023.03.15 |
| AngularJS - 라디오 버튼을 선택한 경우 트리거 (0) | 2023.03.15 |