如何在AngularJS中引用数据?

时间:2014-11-03 04:50:11

标签: angularjs

在AngularJS中,在嵌套的ng-repeat中,是否可以从第三个表中访问数据?

这是一个例子......让我们说我想创建一个表格,列出第一行中的演员和女演员,然后第一列列出电影。在演员和电影相交的单元格中,我们可能会显示该演员在该影片中的表现。然而,由于每部电影中只会出现少数演员,因此这些相交的单元往往是空白的。如果我们有大约120个演员和600部电影,那么我们谈论的是72,000个可能的交叉点,尽管我们的数据集实际上可能只有5000个条目。

我使用三个JSON文件来执行此操作; actors.json,movies.json和ratings.json。前两个文件包含演员或电影的列表,以及每个文件的扩展数据;即:年份,流派,导演或年龄,国籍等。最后一档; ratings.json,只包含电影的ID,演员的名字(我们的数据不包含演员的ID)和评级。

设置我的表,在第一行中通过actors文件重复显示我的标题行,以及每个actor的名称和信息。我跳过第一个单元格,因为它是我标题列的顶部。

接下来,我通过我的电影数据重复,为每个数据打开一个新行,然后在每一行中,再次通过我的演员数据重复创建收视率td'

所有这一切都有效,但这是我摆脱困境的地方。我无法找到一种轻松获取评级数据的有效方法。我确实弄清楚如何使其工作,基本上循环遍历整个评级表,并过滤匹配,但我知道这不是正确的方法。

以下是一些示例代码:

<table>
    <tr>
        <td></td>
        <td ng-repeat="movie in movies>
            <p>{{movie.name}}</p>
            <p>{{movie.year}}</p>
        </td>
    </tr>
    <tr ng-repeat="actor in actors>
        <td>{{actor.name}}</td>
        <td ng-repeat="movie in movies">
            <span ng-repeat="rating in ratings | filter: { id: movie.id } : true | filter: { actor: actor.name } : true">
                {{rating.rating}}
            </span>
        </td>
    </tr>
</table>

你可以想象,这种方法真的(真的)很慢。

如果这是php或其他什么,我只是从数组中获取数据(即: $ rating [$ movie_id] [$ actor_name] ),简单如馅饼,但是我的生活,我无法弄清楚如何使用AngularJS,而不是。我只想直接引用适当的评级数据。

根据要求,这里是ratings.json的样本。

[
{
    actor: "Brad Pitt",
    id: "13",
    rating: "3"
},
{
    actor: "Jennifer Anniston",
    id: "8",
    rating: "7"
},
...
]

谢谢,

米。

1 个答案:

答案 0 :(得分:0)

您需要将ratings.json数组预处理为嵌套哈希。

var ratings = {};
for (var i=0; i < ratingsArray.length; i++){
  var ratingEntry = ratingsArray[i];
  var id = ratingEntry.Id, actor = ratingEntry.actor;
  rating[id] = rating[id] || {};
  rating[id][actor] = ratingEntry.rating;
}

然后,你可以完全按照PHP的预期行事:

<tr ng-repeat="actor in actors>
  <td>{{actor.name}}</td>
  <td ng-repeat="movie_id in movies">
    {{rating[movie_id][actor]}}
  </td>
</tr>