我有一个问题,我真的无法理解。我正在使用一个基本的角度http.get来返回一个承诺:
getTask: function(id) {
var promise = $http.get('http://localhost:9000/get/tasks/'+id).success(function(data) {
return data;
});
return promise;
}
TasksService.getTask($stateParams.id).then(function(success){
$scope.task = success.data;
});
该任务具有我想要访问的属性,但它总是以不确定的方式返回。如果我这样做:
TasksService.getTask($stateParams.id).then(function(success){
$scope.task = success.data;
console.log($scope.task.deadline);
});
它未定义。你知道我如何访问这些属性,然后如何与我的控制器的其余部分共享它?
答案 0 :(得分:0)
啊,.success
与.then
的混淆再次发生。 Angular引入的这种微妙(并且在我看来,完全没有必要)的差异产生了很多问题。
这里的问题是.success
返回原始承诺,在这方面,忽略您返回的data
。换句话说,它“分支”并允许实现不影响链的其余部分的处理程序。
要修复,请使用.then
:
return $http.get(url).then(function(response) {
return response.data;
});
<强>附录:强>
为了更好地理解,.success
在概念上表现如下:
promise.success = function(fn) {
promise.then(function(response) {
fn(response.data, response.status, response.headers, config);
});
// the original promise is returned, not the .then promise
return promise;
}
答案 1 :(得分:-1)
我建议你用Object.keys方法检查变量,如下所示:
var obj = {};
obj['key_1'] = 1;
obj['key_2'] = 2;
alert(Object.keys(obj));
此方法将告诉您很多有关变量属性和支持的方法的信息。
答案 2 :(得分:-1)
通过执行此操作进行修复:$scope.task.task[0].deadline