http的自定义服务无法正常工作

时间:2016-03-27 12:14:44

标签: javascript angularjs service

我已经为这样的$ http请求定义了一个自定义服务:

app.factory("ajaxCall",["$http",'$q',function($http,$q){    
return {
        getData : function(url){
            var deferred = $q.defer();
            $http.get(url).then(function(data)
            {
                deferred.resolve(data);
            })
        return deferred.promise;
        }
    }
}]);

我在决心中使用此服务,如:

    resolve:{

                tableData: function(ajaxCall){
                 return {
                  ajaxCall.getData({/* A Url */}); //line a
                 } 

                } 
            }

但是它给了我一个错误:a行的意外标识符。我做错了什么?

3 个答案:

答案 0 :(得分:1)

$http.get(url)期望url为字符串,但您尝试将该字符串包装在{}

resolve语法也不正确。

尝试

resolve: {
   tableData: function(ajaxCall) {
     return ajaxCall.getData( /* A Url */ ); 
   }
 }

此外,您在工厂中使用了承诺反模式,可以简化为:

app.factory("ajaxCall", ["$http", '$q',
  function($http, $q) {
    return {
      getData: function(url) {
        return $http.get(url).then(function(response) {
          return response.data;
        });    
      };
    }
  }
]);

答案 1 :(得分:0)

确保你写的是有效的javascript(你在那边有太多花括号):

resolve: {
    tableData: function(ajaxCall) {
        return ajaxCall.getData('http://....');
    } 
}

答案 2 :(得分:0)

你可以使用app.factory或app.service。例如:

app.factory('service', ['$http', function ($http) {       

    return {
        save: function (data) {
            return $http({
                url: 'your url is here',
                method: 'POST',
                data: data
            })
        },
     };
}]);

然后在角度控制器中:

 $scope.addButtonClick = function () {

            var info = {};
            info ["Id"] = $scope.Id;                
            info ["name"] = $scope.name;
            info ["pwd"] = $scope.pwd;

            service.save(info )
            .success(function (data) {
                $scope.reset();
            })
            .error(function (xhr) {
                $ngBootbox.alert('Error in saving data');
            });
        }
    }