gpt4 book ai didi

json - 如何通过 angularjs $resource 访问 json 中的嵌套对象

转载 作者:行者123 更新时间:2023-12-04 14:30:23 28 4
gpt4 key购买 nike

我有提供 REST 服务的 .NET WCF 服务。一切都对我有用,直到我尝试发送带有嵌套对象的对象。然后我在 angularjs 中一无所获。如何使用/访问嵌套对象进行数据交换?

.NET 服务部分:

[OperationContract] // route prefix 'api'
[WebGet(UriTemplate = "users/{id}/privileges", ResponseFormat = WebMessageFormat.Json)]
public PrivilegeSet GetPrivileges(string id)
{
var response = new PrivilegeSet();

List<Role> roles = new List<Role>();
roles.Add(new Role() { RoleId = 1, Name = "Role 1", Active = true });
roles.Add(new Role() { RoleId = 2, Name = "Role 2", Active = true });
roles.Add(new Role() { RoleId = 3, Name = "Role 3", Active = false });
response.Roles = roles;

List<SubRole> subRoles = new List<SubRole>();
subRoles.Add(new SubRole() { SubRoleId = 1, Name = "SubRole 1", RoleId = 1, Active = true });
subRoles.Add(new SubRole() { SubRoleId = 2, Name = "SubRole 2", RoleId = 1, Active = true });
subRoles.Add(new SubRole() { SubRoleId = 3, Name = "SubRole 3", RoleId = 1, Active = false });
response.SubRoles = subRoles;

return response;
}

JSON 结构:
{
"Roles": [
{
"Active": true,
"Name": "Role 1",
"RoleId": 1
},
{
"Active": true,
"Name": "Role 2",
"RoleId": 2
},
{
"Active": false,
"Name": "Role 3",
"RoleId": 3
}
],
"SubRoles": [
{
"Active": true,
"Name": "SubRole 1",
"RoleId": 1,
"SubRoleId": 1
},
{
"Active": true,
"Name": "SubRole 2",
"RoleId": 1,
"SubRoleId": 2
},
{
"Active": false,
"Name": "SubRole 3",
"RoleId": 1,
"SubRoleId": 3
}
]
}

Angular 服务:
angular.module('privilegeService', ['ngResource']).
factory('Privilege', function ($resource) {
return $resource('api/users/:userId/privileges', {userId: '@id'});
});

Angularjs 获取部分:
function PrivilegesCtrl($scope, Privilege) {
$scope.privileges = Privilege.query({userId:2}); // privileges remains empty using nested objects, with one level object works fine
...

当 JSON 具有嵌套对象时,为什么权限仍然为空?以及如何访问 View 中的嵌套对象?

最佳答案

当您使用 $resource服务 .query action 假定您的响应是一个数组。您可以在使用 .query 时指定响应不是数组通过在使用下面的第三个参数创建资源时指定它:

angular.module('privilegeService', ['ngResource']).
factory('Privilege', function ($resource) {
return $resource('api/users/:userId/privileges',
{userId: '@id'},
{'query': {method:'GET', isArray:false}});
});

退房 this plnkr举个例子。如果你拿出 {'query': {method:'GET', isArray:false}}您的响应将是一个空数组。

注 1:您的控制台可能会显示错误 TypeError: Object #<Resource> has no method 'push'其中,当与 .query 一起工作时,通常意味着您的 REST 调用需要一个数组。

注 2:资源操作默认值在 $resource 中描述。文档如下:
{ 'get':    {method:'GET'},
'save': {method:'POST'},
'query': {method:'GET', isArray:true},
'remove': {method:'DELETE'},
'delete': {method:'DELETE'} };

关于json - 如何通过 angularjs $resource 访问 json 中的嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14973602/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com