我有一家工厂:
.factory('CompanyRolesResource', function($resource, FdConfig) {
return $resource(FdConfig.routes.companyRoles);
})
我有一个使用这个工厂的功能:
ctrl.saveCompanyRole = function(companyRole) {
return CompanyRolesResource.save({}, companyRole).$promise.then(function (response) {
console.log(response)
});
};
在Chrome DevTools中,我看到响应是{status: 200, data: {...}}
之类的数据。但在console.log
我只看到:
Resource
$promise: Promise
$$state: Object
__proto__: Object
$resolved: true
我的data
在哪里?我在$promise
和$$state
内也找不到它。
UPD:
当我使用这种方式时,我得到了正确的答案:
$http({
url: FdConfig.routes.companyRoles,
method: "POST",
data: companyRole
}).then(function (response) {
console.log(response.data);
});
但我工厂的console.log(response)
会返回undefined
。
答案 0 :(得分:2)
您无法直接从$resource
访问数据,因为它是从服务器异步检索的。这意味着当您尝试访问数据时,您的数据尚未加载。您需要做的是为$resource
操作提供回调。
从 Angular 1.2 开始,$resource
为每个操作提供$promise
,您可以使用这些操作在加载数据时检索数据:
CompanyRolesResource.save({}, companyRole).$promise.then(function (response) {
// do whatever you want with your response.data here
});
答案 1 :(得分:1)
Resource
是您的数据对象。当您使用$ resource时,您不会将响应作为(状态,数据,标题,配置)对象获得。您将直接获得响应(您的预期响应数据)
答案 2 :(得分:1)
重要的是要意识到调用$resource
对象方法会立即返回一个空引用(对象或数组,具体取决于isArray
)。从服务器返回数据后,将使用实际数据填充现有引用。
在幕后,ngResource API使用angular.copy将服务器数据复制到空引用。 如果数据不是JavaScript对象,则不会复制任何内容。
对于.save
操作方法,如果返回一个数组,则会抛出$resource:badcfg
错误。
错误:$ resource:badcfg
响应与配置的参数
不匹配描述
当$resource service期望可以反序列化为数组但接收对象的响应时,会发生此错误,反之亦然。默认情况下,所有资源操作都需要对象,但需要数组的
query
除外。要解决此错误,请确保您的
$resource
配置与从服务器返回的数据的实际格式相匹配。有关详细信息,请参阅$resource API参考文档。