如何在 angular 中使用资源工厂调用多个 GET 请求?
How to call multiple GET requests using a resource factory in angular?
这是我使用 $resource
的工厂方法代码
(function () {
"use strict";
angular.module("common.services")
.factory("lookupResource", ["$resource", "appsettings", lookupResource])
function lookupResource($resource, appsettings) {
return {
lookupUserRoles: $resource(appsettings.serverpath + "api/UserRoles", null,
{
'userRoles': { method: 'get' }
}),
lookupStaffTypes: $resource(appsettings.serverpath + "api/StaffTypes", null,
{
'staffTypes': { method: 'get' }
})
}
}
})();
我正在尝试使用以下代码调用 lookupStaffTypes,但它没有提供任何数据或错误。我在这里错过了什么?
lookupResource.lookupStaffTypes.staffTypes( function (data) {
var test = data;
},
function (response) {
vm.message = response.statusText + "\r\n"
if (response.data.exceptionMessage)
{ vm.message += response.data.exceptionMessage }
//validation errors
if (response.data.error) {
vm.message += response.data.error;
}
});
我在哪里可以这样调用它并为我提供数据:
var staffTypes = $http.get(appsettings.serverpath + "api/StaffTypes").then(function (dataResponse) {
var qwe = dataResponse;
for (var i = 0; i < dataResponse.data.length; i++) {
$scope.staffTypeList.push(dataResponse.data[i]);
}
}, function (response) {
vm.message = response.statusText + "\r\n"
if (response.data.exceptionMessage)
{ vm.message += response.data.exceptionMessage }
//validation errors
if (response.data.error) {
vm.message += response.data.error;
}
});
我是 angular 的新手,非常感谢任何帮助!
我建议避免 ngResource module and just using the $http service directly. If a server implements a RESTful API, I recommend using Restangular.
也就是说,对于 ngResource:
如果服务器return是一个数组,用isArray: true
定义动作方法很重要:
app.factory("lookupResource", ["$resource", "appsettings", lookupResource])
function lookupResource($resource, appsettings) {
return {
lookupStaffTypes: $resource(appsettings.serverpath + "api/StaffTypes", null,
{
'staffTypes': { method: 'get',
isArray: true }
})
}
}
调用它:
$scope.staffTypeList = lookupResource.lookupStaffTypes.staffTypes();
//OR
$scope.staffTypeList = lookupResource.lookupStaffTypes.query();
重要的是要认识到立即调用 $resource
对象方法 return 是一个空引用(对象或数组取决于 isArray
)。从服务器 return 编辑数据后,现有引用将填充实际数据。
如果服务需要一个对象但接收到一个数组,反之亦然,它将生成一个 $resource:badcfg error。如果服务 return 是布尔值或字符串,则操作方法将安静地 return 什么都没有。
使用接收到的对象(或数组)的$promise
属性来链接顺序操作:
$scope.staffTypeList.$promise.then(function(staffTypeList) {
console.log(staffTypeList);
//Do more stuff
});
这是我使用 $resource
的工厂方法代码 (function () {
"use strict";
angular.module("common.services")
.factory("lookupResource", ["$resource", "appsettings", lookupResource])
function lookupResource($resource, appsettings) {
return {
lookupUserRoles: $resource(appsettings.serverpath + "api/UserRoles", null,
{
'userRoles': { method: 'get' }
}),
lookupStaffTypes: $resource(appsettings.serverpath + "api/StaffTypes", null,
{
'staffTypes': { method: 'get' }
})
}
}
})();
我正在尝试使用以下代码调用 lookupStaffTypes,但它没有提供任何数据或错误。我在这里错过了什么?
lookupResource.lookupStaffTypes.staffTypes( function (data) {
var test = data;
},
function (response) {
vm.message = response.statusText + "\r\n"
if (response.data.exceptionMessage)
{ vm.message += response.data.exceptionMessage }
//validation errors
if (response.data.error) {
vm.message += response.data.error;
}
});
我在哪里可以这样调用它并为我提供数据:
var staffTypes = $http.get(appsettings.serverpath + "api/StaffTypes").then(function (dataResponse) {
var qwe = dataResponse;
for (var i = 0; i < dataResponse.data.length; i++) {
$scope.staffTypeList.push(dataResponse.data[i]);
}
}, function (response) {
vm.message = response.statusText + "\r\n"
if (response.data.exceptionMessage)
{ vm.message += response.data.exceptionMessage }
//validation errors
if (response.data.error) {
vm.message += response.data.error;
}
});
我是 angular 的新手,非常感谢任何帮助!
我建议避免 ngResource module and just using the $http service directly. If a server implements a RESTful API, I recommend using Restangular.
也就是说,对于 ngResource:
如果服务器return是一个数组,用isArray: true
定义动作方法很重要:
app.factory("lookupResource", ["$resource", "appsettings", lookupResource])
function lookupResource($resource, appsettings) {
return {
lookupStaffTypes: $resource(appsettings.serverpath + "api/StaffTypes", null,
{
'staffTypes': { method: 'get',
isArray: true }
})
}
}
调用它:
$scope.staffTypeList = lookupResource.lookupStaffTypes.staffTypes();
//OR
$scope.staffTypeList = lookupResource.lookupStaffTypes.query();
重要的是要认识到立即调用 $resource
对象方法 return 是一个空引用(对象或数组取决于 isArray
)。从服务器 return 编辑数据后,现有引用将填充实际数据。
如果服务需要一个对象但接收到一个数组,反之亦然,它将生成一个 $resource:badcfg error。如果服务 return 是布尔值或字符串,则操作方法将安静地 return 什么都没有。
使用接收到的对象(或数组)的$promise
属性来链接顺序操作:
$scope.staffTypeList.$promise.then(function(staffTypeList) {
console.log(staffTypeList);
//Do more stuff
});