[英]Can't get response from Angular $resource
我有一家工廠:
.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
。
您無法直接從$resource
訪問數據,因為它是從服務器異步檢索的。 這意味着您嘗試訪問數據時尚未加載數據。 您需要做的是為$resource
操作提供回調。
從Angular 1.2開始, $resource
為每個動作提供$promise
,您可以在加載數據時用來檢索數據:
CompanyRolesResource.save({}, companyRole).$promise.then(function (response) {
// do whatever you want with your response.data here
});
Resource
是您的數據對象。 當您使用$ resource時,您不會獲得響應(狀態,數據,標頭,配置)對象。 您將直接獲得響應(您的預期響應數據)
重要的是要意識到調用$resource
對象方法會立即返回一個空引用(對象或數組取決於isArray
)。 從服務器返回數據后,將使用實際數據填充現有引用。
在后台,ngResource API使用angular.copy將服務器數據復制到空引用。 如果數據不是JavaScript對象,則不會復制任何內容。
對於.save
動作方法,如果返回數組,將拋出$resource:badcfg
錯誤。
錯誤:$ resource:badcfg
響應與配置的參數不匹配
描述
當$ resource服務期望一個可以反序列化為數組但接收到對象的響應時,就會發生此錯誤,反之亦然。 默認情況下,所有資源操作均期望對象,但期望數組的
query
除外。要解決此錯誤,請確保
$resource
配置與從服務器返回的數據的實際格式匹配。有關更多信息,請參見$ resource API參考文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.