在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"
},
...
]
谢谢,
米。
答案 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>