이 공통 의문 중 하나에 $ HTTP 서비스 사용이다 -
그래서 제 질문은 는
주이 controllerB하는 controllerA에서 데이터를 전달하는 방법이다. 귀하의 요구 사항에 따라 최선의 선택은 이며 영화 목록을 검색 한 다음 controllerA
및 controllerB
에서이 서비스를 사용하는 것입니다.
module.factory('youtube', function() {
var movieListCache;
function getMovies(ignoreCache) {
if (ignoreCache || !movieListCache) {
movieListCache = $http...;
}
return movieListCache;
}
return {
get: getMovies
};
});
은 그럼 그냥 두 컨트롤러에서이 서비스를 주입.
module.controller('controllerA', ['youtube', function(youtube) {
youtube.get().then(function doSomethingAfterRetrievingTheMovies() {
});
}]);
module.controller('controllerB', ['youtube', function(youtube) {
youtube.get().then(function doAnotherThingAfterRetrievingTheMovies() {
});
}]);
B에서 사용하기 전에 controllerA가 정보를 조작해야하는 경우 서비스에서 더 많은 메소드를 작성할 수 있습니다. 이런 식으로 뭔가 :
module.factory('youtube', function($q) {
var movieListCache,
deferred = $q.defer();
function getMovies(ignoreCache) {
if (ignoreCache || !movieListCache) {
movieListCache = $http...;
}
return movieListCache;
}
function getChangedMovies() {
return deferred.promise;
}
function setChangedMovies(movies) {
deferred.resolve(movies);
}
return {
get: getMovies,
getChanged: getChangedMovies,
setChanged: setChangedMovies
};
});
당신이 $q
이 무엇인지 알 수없는 경우, take a look at the docs. 비동기 작업을 처리하기 위해 필수입니다. 컨트롤러가 아버지 인 경우
- 당신은
$rootScope
- 에 동영상을 저장할 수 있고 아들이 사용할 수있는 서로 컨트롤러를 검색 할 필요 어쨌든
도이 작업을 달성하는 몇 가지 다른 방법이 있습니다
IMHO, # 1은 일반적인 해결책입니다. 다른 옵션이없는 경우에만 사용하겠습니다. 그리고 # 2는 다른 컨트롤러의 존재를 설정하거나 알려주는 것과 같이 컨트롤러 사이에서 통신해야하는 본질적 요구가있는 경우에 유용합니다. example here이 있습니다.
당신이하고 싶은 것은 stateful 싱글 톤 정보를 공유하는 것입니다; 따라서 서비스는 갈 길이 멀다.
서비스를 만들어야합니다.이 게시물을 확인하십시오. http://stackoverflow.com/a/12009408/2104976 – callmekatootie