AngularJS: factory $http service
Я пытаюсь понять концепцию factory и сервис в Angular. У меня есть следующий код под контроллером
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);
};
Этот код работает нормально. Но когда я переношу $http service в factory, я не могу вернуть данные обратно контроллеру.
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);
};
});
Есть ли какое-либо преимущество в использовании factory, поскольку $http работает даже под контроллером
Ответы
Ответ 1
Целью переноса службы studentSessions
из вашего контроллера является устранение проблем. Ваша служебная работа заключается в том, чтобы знать, как разговаривать с сервером, а задание контроллера - переводить между данными представления и данными сервера.
Но вы сбиваете с толку своих асинхронных обработчиков и что что-то возвращает. Контроллер все еще должен сообщить службе, что делать, когда данные будут получены позже...
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);
});
Ответ 2
Первый ответ велик, но, может быть, вы можете это понять:
studentApp.factory('studentSessionFactory', function($http){
var factory = {};
factory.getSessions = function(){
return $http.post('/services', {type :'getSource',ID :'TP001'});
};
return factory;
});
Тогда:
studentApp.controller('studentMenu',function($scope, studentSessionFactory){
$scope.variableName = [];
init();
function init(){
studentSessionFactory.getSessions().success(function(data, status){
$scope.variableName = data;
});
console.log($scope.variableName);
};
});