使用AngularJS的$资源来查找json数组中的特定元素

时间:2014-07-22 16:21:13

标签: json angularjs resources

我是AngularJS的新手。试图通过$ resource从JSON数组中获取特定元素。 JSON文件staffs.json的结构如下:

[{
    "id": 0,
    "facility_id": [0],
    "name": "Tim",
    "role_id": 0
},
{
    "id": 1,
    "facility_id": [0],
    "name": "Duncan",
    "role_id": 0
},
{
    "id": 2,
    "facility_id": [0],
    "name": "Tony",
    "role_id": 1
},
{
    "id": 3,
    "facility_id": [0],
    "name": "Parker",
    "role_id": 1
},
{
    "id": 4,
    "facility_id": [0],
    "name": "Manu",
    "role_id": 2
},
{
    "id": 5,
    "facility_id": [0],
    "name": "Ginobili",
    "role_id": 2
},
{
    "id": 6,
    "facility_id": [0],
    "name": "Tiago",
    "role_id": 3
},
{
    "id": 7,
    "facility_id": [0],
    "name": "Splitter",
    "role_id": 3
}]

我想找一个名字叫" Tiago"的员工。 代码是:

var url = 'data/staffs.json';
var username = 'Tiago';
users = $resource(url);
users.get({name: username}, function(data){
    alert(data.name);
});

似乎get()内的alert()函数永远不会被调用。但是,如果我将方法从users.get()更改为users.query(),它可以获取人员列表。我想这是因为JSON文件中的数据是一个数组,所以用于获取数组的query()工作,而get()不起作用,因为它不适用于数组操作。我对么?

我只是想知道是否必须使用query()获取整个数组并逐个匹配元素,直到找到具有相同名称的元素,或者有一些更简单的方法来获取我想要的元素。 / p>

谢谢

2 个答案:

答案 0 :(得分:2)

AngularJS资源具有单独的查询功能,以避免数组的JSONP漏洞。您有两种选择:

  • get all并在客户端找到数组中的元素
  • 为单个用户添加额外的API端点,并按名称
  • 获取

我投票支持选项二,因为您不必通过线路发送所有内容,而是使用服务器(DB)来获取特定用户。服务器软件针对此进行了优化。

答案 1 :(得分:1)

您最好的选择是使用query()方法获取数据,然后使用indexOf()

var url = 'data/staffs.json';
var username = 'Tiago';
users = $resource(url);
users.get({name: username}, function(data){
    dataOfMyUser = data.map(function(cur) { return cur.name }).indexOf(username);
    alert(dataofMyUser);
});