我有一个API列出电影的链接,每部电影都有标题,ID等......
API:http://private-5d90c-kevinhiller.apiary-mock.com/angular_challenge/horror_movies
它还有一个offers
数组,其中包含'provider_id'属性。
我需要展示哪家提供商有多少部电影。
但我不知道怎么样,我想出的最好的是:
{{movie.offers[0].provider_id}}
但这仅显示每部电影的第一个提供者。
我想要的是提取每个提供商有多少部电影。
我的Html:
<div ng-controller="ProviderController as provider">
<div ng-repeat="movie in provider.movies">
{{movie.offers[0].provider_id}}
</div>
</div>
My Main.js:
app.controller('ProviderController', function($http) {
var provider = this;
provider.movies = [];
$http({
url: 'some/path/horror_movies',
method: "GET",
}).success(function(data) {
provider.movies = data;
});
});
这也是json文件的结构:
[{
"id": 140524,
"title": "Dracula Untold",
"offers": [{
"provider_id": 2,
"retail_price": 14.99,
//...
}, {
"provider_id": 2,
"retail_price": 14.99,
}, {
"provider_id": 7,
"retail_price": 14.99,
}, ]
},
{
"id": 138993,
"title": "The Purge: Anarchy",
"offers": [
// ...
]
},
]
有什么想法吗?感谢。
答案 0 :(得分:0)
您需要更改数据库的结构,以使提供程序位于顶层。实现这样的功能的功能应该遍历每个电影提供,如下所示:
function getProviders (movies) {
var providers = [],
movie = {},
offer = {};
for (var i = 0, max = movies.length; i < max; i += 1) {
movie = movies[i];
for (var j = 0; j < movies[i].offers.length; j += 1) {
offer = movie.offers[j];
if (typeof providers[offer.provider_id] === 'undefined') {
providers[offer.provider_id] = { movies: [] };
}
providers[offer.provider_id].movies.push(movie);
}
}
return providers;
}
我在这里开始了一个小提琴:http://jsfiddle.net/d29tu8fg/1/
在向提供商添加电影之前,您可能还想检查该电影是否已存在。你只需要这样做,如果 - 就像你的数据一样 - 一部电影可以有来自同一提供商的两个不同的优惠。
将提供者添加到$scope
,并在视图中显示长度:
<div ng-repeat="provider in providers track by $index">
{{provider.movies.length}}
</div>