我一直在使用角度服务,数据返回正常。 但是,我想直接调用json文件,除非它现在不喜欢数据。
工作版
控制器代码:
var confirm = this;
confirm.booking = airConfirmationService.getTestData();
服务代码:
.factory('airConfirmationService', airConfirmationService);
var confirm = {};
confirmed.getTestData = function () {
return {
"flightData": [
{
"MultiCarrier": false,
// etc...
但是我使用.service切换到服务并直接调用.json文件的位置。
无法正常工作(好吧,它会提取数据,但会以我不理解的方式返回)
.service('airConfirmationService', function ($http) {
this.getTestData = function () {
return $http({
url: '../apps/temp/Api_Responses/confirm.booking.json',
method: "GET"
})
}
});
然后在控制器中
var confirm = this;
confirm.booking = airConfirmationService.getTestData();
console.log(confirm.booking) // Picture attached shows how the data looks
// My attempt at getting "at" the data ...
//var temp = [];
//temp = airConfirmationService.getTestData();
//confirm.booking = temp.d.Data;
更新
虽然下面这段代码“有效”,但我觉得不做“q”/ defer /。然后会很糟糕......
此代码在调用服务的控制器中有效,但是如何添加/更改为q / defer和/或.then?
var getData = airConfirmationService.getTestData();
getData.success(function(data) {
confirm.booking = data;
});
答案 0 :(得分:0)
Angular $http
是异步的。从服务器获取数据的网络操作可能需要一些时间,因此angular不会期望您的应用程序等待操作完成,直到数据可用为止。因此,promise对象用作数据的占位符。 Promise有一个.then()
函数,告诉它在操作完成后应该执行其他代码的承诺。它们还提供.catch()
函数,用于何时出现错误且数据未被返回。
使用$http
的正确方法是:
var confirm = this;
confirm.testData = {};
airConfirmationService.getTestData()
.then(function(response) {
confirm.testData = response.data;
})
.catch(function(){
//something went wrong
});