Есть ли способ передать информацию с контроллера для обслуживания? Я знаю, что вы должны передавать информацию из службы контроллеру, но позвольте мне объяснить вам мою проблему:AngularJS: информация о проходе от контроллера к службе
У меня есть два экрана (или два вида) с другим контроллером, но с тем же модулем. Назовем их: ControllerOne с ViewOne и ServiceOne AND ControllerTwo с ViewTwo и ServiceTwo.
ServiceOne
делает http-запрос, чтобы получить некоторые данные json (из удаленного источника). В ControllerOne
У меня есть функция, где он вызывает ServiceOne для получения всех данных, а в ViewOne я показываю список всех видео, полученных из удаленного источника (из ControllerOne).
Код для ServiceOne
показано выше:
(function() {
'use strict';
angular
.module('MyApp.MyModule')
.factory('ServiceOne', ServiceOne);
ServiceOne.$inject = ['$http', '$q'];
function ServiceOne($http, $q) {
var url = 'https://THE_LINK_I_WANT_TO_GET_DATA_FROM';
var result = [];
var service = {
getAllVideos: getAllVideos,
getVideo: getVideo
};
return service;
function getAllVideos(callback){
$http.get(url)
.success(function(data) {
result = data.result;
callback(result);
});
}
function getVideo(videoId) {
for (var i = 0; i < result.length; i++) {
if (result[i].videoId === videoId) {
return $q.when(result[i]);
}
}
return $q.when(null);
}
}
})();
ControllerOne
выглядит следующим образом:
(function() {
'use strict';
angular
.module('MyApp.MyModule')
.controller('ControllerOne', ControllerOne);
ControllerOne.$inject = ['$scope', '$state', 'ServiceOne'];
function ControllerOne($scope, $state, ServiceOne) {
var vm = angular.extend(this, {
videos: [],
navigateToVideo: navigateToVideo
});
ServiceOne.getAllVideos(function(data){
vm.videos = data;
});
function navigateToVideo(videoId) {
$state.go('app.video', { videoId: videoId });
}
}
})();
На ViewOne
, каждый раз кто-то нажимает на видео, я провожу их в другой точке зрения (ViewTwo
в моем случае) и передается параметр (уникальный идентификатор).
ControllerTwo
выглядит следующим образом:
(function() {
'use strict';
angular
.module('MyApp.MyModule')
.controller('ControllerTwo', ControllerTwo);
ControllerTwo.$inject = ['$scope', '$state', '$stateParams', 'ServiceOne'];
function ControllerTwo($scope, $state, $stateParams, ServiceOne) {
var vm = angular.extend(this, {
video: []
});
(function init(){
loadData();
})();
function loadData(){
var videoId = String($stateParams.videoId);
ServiceOne.getVideo(videoId)
.then(function(video) {
vm.video = video;
});
}
}
})();
В ControllerTwo
откладываю параметр, передаваемый от ControllerOne
, и сохранить его на videoId
. Затем я вызываю функцию ServiceOne
, чтобы получить объект, который я искал.
Итак, мой вопрос:
Могу ли я передать объект vm.video
из ControllerTwo
в ServiceTwo
, так что я могу использовать его в будущем?
Спасибо!
Услуги являются однотоновыми, поэтому пока вы не перезагрузите приложение, вы можете хранить vm.video в сервисе ServiceTwo. Вы также можете использовать localStorage, sessionStorage или кеш $ http ... это зависит от ваших потребностей. – krutkowski86