golovewkin
@golovewkin
WEB - Разработчик

Какая правильная структура приложения?

В моем понимании с сервером должна работать модель.
Но, если ее сделать отдельным сервисом, результат http запроса почему-то возвращает "undefined"

код контроллера
taskApp.controller('taskCtrl', function($scope, $http, taskModel) {
    $scope.tasks = taskModel.getTasks()
});


код модели
taskApp.service('taskModel', ['$http',
    function($http) {
        this.getTasks = function () {
            $http.get("tasks.json").then(function (response) {
               console.log(response.data)  // модель правильно получает ответ
                return response.data  // в контроллер это не приходит, хотя, по идее, должно
            })
        }
    }
]);


если в контроллер засунуть
$http.get("tasks.json").success(function (response) {                
                    $scope.tasks = response;  // работает. Если отдать response.data работать не будет
                })

Работает.
Подскажите, пожалуйста, что я неправильно делаю?
И непонятно, что возвращать из модели response или response.data ?
Такую структуру нельзя использовать? o_O
Спасибо
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
@Div100
//это в твоем сервисе пишешь ф-ии такого типа
function getTasks() {
   var defer = $q.defer();
   $http.get("tasks.json").then(function (response) {
       defer.resolve(response);
    }, function (err) {
       defer.reject(err);
    })
    return defer.promise;
}

//теперь можешь с этим работать
$scope.tasks = {}; // а если у тебя есть роутинг, можешь про resolve прочитать, ну или могу пример написать
YourService.getTasks().then(function(response) {
   tasks = response; // или response.data смотря, что у тебя там приходит - какая структура 
}, function(err) {
    $scope.errors = "error";
})


а вообще вместо $scope.tasks делай как-нибудь так:
Controller:
var vm = this;
vm.tasks = {};

html:
{{ctrl.tasks}}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы