【发布时间】:2017-04-11 07:13:37
【问题描述】:
我需要通过提供输入日期从服务中检索输出数据。数据在服务上执行,但我无法将输出数据返回给控制器。我为code.link做了一个plunker 普朗克链接
【问题讨论】:
标签: angularjs return return-value
我需要通过提供输入日期从服务中检索输出数据。数据在服务上执行,但我无法将输出数据返回给控制器。我为code.link做了一个plunker 普朗克链接
【问题讨论】:
标签: angularjs return return-value
你需要return你的$http.get和.then你最终修改的变量,比如obj。
像这样:
return $http({
url: 'miqaat.json',
method: 'GET',
})
.then(function(response) {
var all_miqaats = response.data.response;
var obj = all_miqaats.find(function(v) {
return v.miqaat_date == dat
});
if (obj == undefined || obj == "") {
console.log("obj = ");
console.log(obj);
obj.isHoliday = "100";
// return obj;
} else {
obj.mq_title = obj.title;
obj.isHoliday = "101";
// return obj;
console.log("Data from Service");
console.log(obj);
}
return obj;
})
而且,由于这会返回承诺,因此在控制器中您需要将其更改为:
getMiqaat.findMiqaat($scope.date).then(function(res) {
$scope.miqaat = res;
});
您是否应该将.then 和catch 移动到controller 取决于您reuse 该代码的多少。所以,在我知道细节之前不会对此发表评论。
【讨论】:
而不是从工厂获得承诺。从控制器中捕获它。只返回工厂内部的http。
app.controller('myCtrl', function($scope, getMiqaat) {
$scope.date = "2017-04-11";
getMiqaat.findMiqaat($scope.date)
.then(function(response) {
var all_miqaats = response.data.response;
var obj = all_miqaats.find(function(v) {
return v.miqaat_date == $scope.date
});
if (obj == undefined || obj == "") {
console.log("obj = ");
console.log(obj);
obj.isHoliday = "100";
$scope.miqaat = obj;
} else {
obj.mq_title = obj.title;
obj.isHoliday = "101";
$scope.miqaat = obj;
console.log("Data from Service");
console.log(obj);
}
})
.catch(function(response) {
response.response = "Internal Server Error!";
});;
});
app.factory('getMiqaat', function($http) {
return {
findMiqaat: function(date) {
var dat = date;
console.log(dat);
return $http({
url: 'miqaat.json',
method: 'GET',
})
}
};
})
【讨论】:
通过使用下面提到的代码,它将正常工作。请确保键与您的 json 匹配。
控制器代码:
var app = angular.module("myApp", []);
app.controller('myCtrl', function($scope, getMiqaat){
$scope.date = "2017-04-11";
console.log("date ::"+$scope.date);
$scope.status;
$scope.miqaat;
getMiqaatData();
function getMiqaatData() {
getMiqaat.findMiqaat($scope.date)
.then(function (response) {
$scope.miqaat = response.data.response[0];
}, function (error) {
$scope.status = 'Unable to load data: ' + error.message;
});
}
});
app.service('getMiqaat', function($http){
this.findMiqaat = function(date){
var dat = date;
console.log(dat);
return $http({
url: 'miqaat.json',
method: 'GET',
});
}
})
Json :
{
"status":true,
"message":"List of the miqaats",
"response":[
{"miqaat_date":"2017-04-11",
"mq_title":" New Year",
"isHoliday" :"101"
},
{"miqaat_date":"2017-04-09",
"mq_title":"Some Fest",
"isHoliday" :"101"
}
]
}
【讨论】: