在角度JS中使用$ http服务的最佳方法是什么? 我们怎样才能实现承诺范式并做到最好 任何帮助将不胜感激。
我已通过API开发人员指南并找到以下内容..
$http.get(url)
我想知道承诺调用会是什么样子,我如何将回调函数附加到此?
答案 0 :(得分:5)
对$ http的任何调用都会返回一个promise对象,因此您可以调用成功方法或错误,如下所示:
$http.get("/url").success(function(data){
})
.error(function(errorData, errorStatus){
})
或者你可以这样做:
var promise = $http.get("/url");
promise.success(...)
答案 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;
});
}
}