在Angular JS中实现$ http的最佳方法?

时间:2013-01-29 22:19:24

标签: angularjs

在角度JS中使用$ http服务的最佳方法是什么? 我们怎样才能实现承诺范式并做到最好 任何帮助将不胜感激。

我已通过API开发人员指南并找到以下内容..

 $http.get(url)

我想知道承诺调用会是什么样子,我如何将回调函数附加到此?

3 个答案:

答案 0 :(得分:5)

对$ http的任何调用都会返回一个promise对象,因此您可以调用成功方法或错误,如下所示:

$http.get("/url").success(function(data){ 

})
.error(function(errorData, errorStatus){

})

或者你可以这样做:

var promise = $http.get("/url");

promise.success(...)

请务必阅读$resource$q$http以了解“有角度”的方式。

答案 1 :(得分:0)

实现回调的最佳方法是这样的

  $http(url).then( function (){
      return //values
   })

现在,如果您想要实现承诺范例,您需要在控制器中设置解析配置

resolve: {
   value1: return $http.get(url).then( function (response){
      if(response)
         return response.data['value'];
  })
  }

答案 2 :(得分:0)

标准方式(行业)

制作 js 文件夹。在此文件夹中,将另一个文件夹命名为 utils。

由于$ http请求将被多次进行,最好将其单独保存。创建一个AngularJS工厂文件并将其命名为jsonLoader.js。

jsonLoader.js:

app.factory("jsonLoader",function($http,$q){
   var object={
    loadJson(json){
        var defer=$q.defer();
//json url of ur data
        var jsonUrl="http://localhost:3000/jsonData/"+json+".json";

        $http.get(jsonUrl).then(function(resolveData){
            defer.resolve(resolveData);//recivedData  
        },
        function(rejectedError){
            console.log("Rejected error from jsonLoader ",rejectedError);
        }
        );
        return defer.promise;
    }
   }
   return object;
});

现在在您的控制器中注入此工厂:

app.controller("mainController",function($scope,mainFactory,jsonLoader){
    $scope.loadNavMenu=()=>{
        console.log("controller");
        var promise =jsonLoader.loadJson('navMenu');
        promise.then(function(recivedData){
            console.log("Data is ",recivedData.data);
//callback function here or some data binding 
            $scope.menuItems=recivedData.data.menuItems;
        }); 
    }
}