Я не хочу выполнять один и тот же HTTP-вызов для контроллеров, поэтому я хочу создать службу, которая извлекает данные и возвращает данные контроллеру, который я пытался сделать

Контроллер:

App.controller('SearchCtrl', function ($scope, $rootScope, $http, $location, ngDialog, Notification, validationSerivce, dataService) {
    $rootScope.pageName = '1-search';
    $scope.type = 'delivery';

    $scope.searchZip = function() {
        //vars
        var zip = $scope.zip;
        var type = $scope.type;

        //check empty zip
        if (typeof zip === "undefined" || zip === null){
            Notification.error({message: "no zipcode entered", delay: 3000});
        } else {
            //validate zip
            if (typeof validationSerivce.validateZip(zip) == "string") {
                Notification.error({message: validationSerivce.validateZip(zip), delay: 3000});
            } else {

                //set spinner and blur
                $scope.setBlur('add');
                $scope.setSpinner('show');

                //get the data
                console.log(dataService.getSearchData(zip,type));
            }
        }
    };
});

И сервис выглядит так:

App.factory("dataService", function($http) {
    return {
        getSearchData: function(zip,type) {
            //Get request
            $http({
                url: url+"/search?zip=" + zip + "&type=" + type,
                method: 'GET',
                headers : {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}
            }).success(function(data){
                return data;
            }).error(function(err){"ERR", console.log(err)});
        }
    };
});

Но возврат не определен

API возвращает данные .... как я могу сделать это наилучшим образом?

0
Ali Murtaza 11 Мар 2015 в 23:43

2 ответа

Лучший ответ

В вашей функции getSearchData() нет оператора возврата. Верните результат из $ http и получите доступ к нему как к обещанию. например

dataService.getSearchData(zip,type).then(function(response) {
  console.log(response)
});
5
rob 11 Мар 2015 в 20:49

Попробуй это:

App.factory("dataService", function($http) {
return {
    getSearchData: function(zip,type) {
        //Get request
        return $http({
            url: url+"/search?zip=" + zip + "&type=" + type,
            method: 'GET',
            headers : {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}
        }).success(function(data){
            return data;
        }).error(function(err){"ERR", console.log(err)});
    }
};
});
1
Matan Gubkin 11 Мар 2015 в 20:54