Это одна из наиболее распространенных сомнений при запуске с AngularJS. По вашему требованию, я считаю, что ваш лучший вариант - create a service, который извлекает список фильмов, а затем использует эту услугу как в controllerA
, так и в controllerB
.
module.factory('youtube', function() {
var movieListCache;
function getMovies(ignoreCache) {
if (ignoreCache || !movieListCache) {
movieListCache = $http...;
}
return movieListCache;
}
return {
get: getMovies
};
});
Затем вы просто вводите эту услугу в оба контроллера.
Если вам нужен контроллерA для управления информацией, прежде чем использовать ее в B, вы можете создать больше методов в службе. Что-то вроде этого:
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.
Что вы хотите сделать, это обмениваться информацией об одноточечной информации с состоянием; поэтому услуга - это путь.
Вам необходимо создать сервис: Отметьте этот пост. http://stackoverflow.com/a/12009408/2104976 – callmekatootie