J'essaie de comprendre le concept d'usine et de service en angulaire. J'ai le code suivant sous le contrôleur
init();
function init(){
$http.post('/services', {
type : 'getSource',
ID : 'TP001'
}).
success(function(data, status) {
updateData(data);
}).
error(function(data, status) {
});
console.log(contentVariable);
};
function updateData(data){
console.log(data);
};
Ce code fonctionne bien. Mais lorsque je déplace le service $ http en usine, je ne suis pas en mesure de renvoyer les données au contrôleur.
studentApp.factory('studentSessionFactory', function($http){
var factory = {};
factory.getSessions = function(){
$http.post('/services', {
type : 'getSource',
ID : 'TP001'
}).
success(function(data, status) {
return data;
}).
error(function(data, status) {
});
};
return factory;
});
studentApp.controller('studentMenu',function($scope, studentSessionFactory){
$scope.variableName = [];
init();
function init(){
$scope.variableName = studentSessionFactory.getSessions();
console.log($scope.variableName);
};
});
Y a-t-il un avantage à utiliser l'usine, puisque $ http fonctionne même sous le contrôleur
Le but de déplacer votre service studentSessions
hors de votre contrôleur est de séparer les problèmes. Le travail de votre service est de savoir comment parler avec le serveur et le travail du contrôleur est de traduire entre les données de vue et les données du serveur.
Mais vous confondez vos gestionnaires asynchrones et ce qui retourne quoi. Le contrôleur doit toujours dire au service ce qu'il doit faire lorsque les données sont reçues plus tard ...
studentApp.factory('studentSession', function($http){
return {
getSessions: function() {
return $http.post('/services', {
type : 'getSource',
ID : 'TP001'
});
}
};
});
studentApp.controller('studentMenu',function($scope, studentSession){
$scope.variableName = [];
var handleSuccess = function(data, status) {
$scope.variableName = data;
console.log($scope.variableName);
};
studentSession.getSessions().success(handleSuccess);
});
La première réponse est excellente, mais vous pouvez peut-être comprendre ceci:
studentApp.factory('studentSessionFactory', function($http){
var factory = {};
factory.getSessions = function(){
return $http.post('/services', {type :'getSource',ID :'TP001'});
};
return factory;
});
Ensuite:
studentApp.controller('studentMenu',function($scope, studentSessionFactory){
$scope.variableName = [];
init();
function init(){
studentSessionFactory.getSessions().success(function(data, status){
$scope.variableName = data;
});
console.log($scope.variableName);
};
});