已解决的 ngResource promise 不包含任何数据
Resolved ngResource promise contains no data
我有一个 Web Api 控制器,其中包含以下方法:
[Route("CountThings/{id}")]
[HttpGet]
public async Task<IHttpActionResult> CountThings(int id)
{
//var numberOfThings = await _thingsRepository.CountThingsAsync(id);
return Ok(123456);
}
如您所见,我总是以 123456 作为数据返回 Ok。这仅用于测试目的。
在我的 Angular 资源文件中我有这个:
getCountThings: {
method: 'GET',
url: controllerPath + 'CountThings/:id',
params: { id: '@id' }
}
在我的 angular 控制器中我有这个:
thingsResource.getCountThings({ id: scope.id })
.$promise
.then(function (data) {
console.log(data);
scope.numberOfThings = data;
});
当我调试我的应用程序时,我可以看到 API 控制器被调用并且 returns 正确。在我的 angular 控制器中,当我记录数据时,我可以看到承诺已经解决。但是,我找不到获取应该返回的数据 (123456) 的方法。如果我记录 data.$resolved,这 returns true.
如何访问我想在我的控制器中使用的数据?
您无法使用 angular $resource
获取图元。尝试从服务器返回 json 对象(如 { data: 123456 }
):
thingsResource.getCountThings({ id: scope.id })
.$promise
.then(function (result) {
scope.numberOfThings = result.data;
});
查看此 issue 并解释为什么资源必须是对象。
替代方法是使用 $http
服务:
$http.get(controllerPath + 'CountThings/' + scope.id).then(function (result) {
scope.numberOfThings = result.data;
});
在这种情况下,您不需要修改服务器上的任何内容。
重要的是要意识到立即调用 $resource 对象方法 returns 一个空引用(对象或数组取决于 isArray
)。从服务器返回数据后,现有引用将填充实际数据。
在幕后,AngularJS 使用 angular.copy。删除所有目标元素(对于数组)或属性(对于对象),然后将源中的所有 elements/properties 复制到它。如果源是原语,则不会复制任何内容。解析的对象或数组将没有数据。
您无法使用 AngularJS $resource
.
获取图元
我有一个 Web Api 控制器,其中包含以下方法:
[Route("CountThings/{id}")]
[HttpGet]
public async Task<IHttpActionResult> CountThings(int id)
{
//var numberOfThings = await _thingsRepository.CountThingsAsync(id);
return Ok(123456);
}
如您所见,我总是以 123456 作为数据返回 Ok。这仅用于测试目的。
在我的 Angular 资源文件中我有这个:
getCountThings: {
method: 'GET',
url: controllerPath + 'CountThings/:id',
params: { id: '@id' }
}
在我的 angular 控制器中我有这个:
thingsResource.getCountThings({ id: scope.id })
.$promise
.then(function (data) {
console.log(data);
scope.numberOfThings = data;
});
当我调试我的应用程序时,我可以看到 API 控制器被调用并且 returns 正确。在我的 angular 控制器中,当我记录数据时,我可以看到承诺已经解决。但是,我找不到获取应该返回的数据 (123456) 的方法。如果我记录 data.$resolved,这 returns true.
如何访问我想在我的控制器中使用的数据?
您无法使用 angular $resource
获取图元。尝试从服务器返回 json 对象(如 { data: 123456 }
):
thingsResource.getCountThings({ id: scope.id })
.$promise
.then(function (result) {
scope.numberOfThings = result.data;
});
查看此 issue 并解释为什么资源必须是对象。
替代方法是使用 $http
服务:
$http.get(controllerPath + 'CountThings/' + scope.id).then(function (result) {
scope.numberOfThings = result.data;
});
在这种情况下,您不需要修改服务器上的任何内容。
重要的是要意识到立即调用 $resource 对象方法 returns 一个空引用(对象或数组取决于 isArray
)。从服务器返回数据后,现有引用将填充实际数据。
在幕后,AngularJS 使用 angular.copy。删除所有目标元素(对于数组)或属性(对于对象),然后将源中的所有 elements/properties 复制到它。如果源是原语,则不会复制任何内容。解析的对象或数组将没有数据。
您无法使用 AngularJS $resource
.