在AngularJS中嵌套数组

时间:2015-10-23 12:00:49

标签: arrays angularjs

我正在使用电影API,在Angular服务中,我有两个电话。一个用于电影列表,一个用于流派列表。在控制器中我将该数组分配给' $ scope.movi​​es'和' $ scope.genres'。电影数组有嵌套数组' genres_id []'。 Id in' movies.genres_id'与genres数组中的id相同。类型数组还具有属性&gen ;. genres.name'。现在我的问题是它可以将这两个数组与id链接,如果它是如何?在我的HTML中我有lopp通过电影阵列

ng-repeat="movie in movies"

现在我想从流派名称中显示电影阵列和流派的标题。这可能吗?我希望我写这个可以理解,谢谢

电影列表

movie list

流派列表

genres list

3 个答案:

答案 0 :(得分:1)

这必须有效(检查拼写错误)。

首先将此功能添加到您的控制器:

/**
 * Returns the *first* Object in an Array with property with a given value
 * @param array: the array in which we search
 * @param property: the name of the property to search for
 * @param value: the value that the given property must have 
 * @returns {*}
 */
    $scope.getObjectWithPropertyValue = function (array, property, value) {
        for (var i = 0; i < array.length; i++) {
            if (array[i][property] == value) {
                return array[i];
            }
        }
        return null;
    }

你也可以在其他情况下使用它。

接下来在您的视图中,您可以执行以下操作:

<p ng-repeat="movie in movies">

    <h3>{{movie.original_name}}</h3>
    <span>{{movie.overview}}</span>

    <h5>Genres</h5>

    <ul>
        <li ng-repeat="gen_id in movie.genre_ids">
            {{getObjectWithPropertyValue(genres, 'id', gen_id).name}}
        </li>
    </ul>

</p>

另外,如果您提供实际数据集而不仅仅是图像,我可以在jsfiddle中为您提供一个工作示例。

答案 1 :(得分:0)

这不一定是关于嵌套数组。

  • 从电影中显示标题:

    {{movie.title}}
    
  • 显示流派名称:

    {{genre[movie.genre_id].name}}
    

正如您所注意到的,您最好的选择是将流派数组转换为由电影 genre_id 索引的对象。否则你必须定义一个函数getGenre,它返回给定电影的类型 genre_id

    {{getGenre(movie.genre_id).name}}  // prefer the solution above so as to 
                                       // not evaluate the function on every digest

答案 2 :(得分:0)

您可以使用http://underscorejs.org/#find在控制器中查找正确的类型。

例如:var item = _.find($ scope.genres,function(genre){genre.id === movie.id});