입력 및 앵커 링크가있는 간단한 템플리트가 있습니다.이 템플리트를 누르면 다른 템플리트가로드됩니다. 이 두 번째 템플릿에서 http 요청을 통해 정보를 가져 오려고합니다.AngularJS ng-route 해결 방법에 대한 HTTP 요청 방법
기본적으로 ng-route를 사용하여 검색 템플릿으로 리디렉션하고 경로/search/: title에서 결과 템플릿으로 리디렉션을 사용하고 결과 템플릿을로드하기 전에 resolve를 사용하여 요청을 작성하려고합니다 (code in plunker).)
내가 직면 한 주요 문제는 내가 컨트롤러를 초기화 할 때 (내가 약속이 반환 된 후에로드 할 것임) 초기화가 중단된다는 것입니다. 즉, 검색 URL과 같은 변수는 초기화되지 않고 $ searchParams는 컨트롤러 검색 기능에서 인쇄 할 때 비어 있습니다.
어떻게해야합니까?
해결 방법에 대한 올바른 구문에 대해 확신 할 수 없습니다. 첫 번째 검색이 범위 변수입니까? 난 당신이 서비스를 작성해야한다고 생각 searchController
var searchController = search.controller('searchController', ["$http", "$scope", "$location", '$rootScope', '$routeParams', function($http, $scope, $location, $rootScope, $routeParams) {
console.log("Controller constructor");
this.searchURL = 'http://www.myapifilms.com/imdb?title=%thetitle%&format=JSON';
$scope.response = '<Response here>';
this.title = '';
this.defer = null;
console.log("PARAMS: " + JSON.stringify($routeParams));
}]);
searchController.search = function searchMovie($q, $routeParams) {
searchController.defer = $q.defer;
var searchString = $routeParams.title;
url = searchController.searchURL.replace('%thetitle%', searchString);
console.log("URL: " + url);
searchController.searchRequest(url);
};
searchController.searchRequest = function(url) {
$http.get(url).success(function(data) {
....
searchController.defer.resolve();
return searchController.defer.promise;
})
.error(function(data, status, headers, config) {
...
searchController.defer.resolve();
return searchController.defer.promise;
})
};
Sammeer에게 감사드립니다. 내가 네가 한 일을 정말로 이해하지 못한다. 당신은 무언가를하는 공장을 만들고 (나는 $ q.when이 무엇인지 알지 못한다), 그 결의안에서 그것을 부른다. http 요청은 어디에 있어야합니까? 왜 연기와 약속 전화가 없습니까? 컨트롤러에서 요청할 수 있습니까? – momo
$ q는 $ http 요청과 마찬가지로 약속을 반환합니다. 내 버전을 확인하십시오. –
다시 한번 감사드립니다. 마지막 질문, HTTP 요청을 컨트롤러에 넣을 수 있습니까? 그리고 중첩 기능을 계속 유지해야 할 필요가 있습니까? 비 Javascript 배경에서 오는 모든이 너무 이상한 것 같습니다 ... – momo