ng-repeat,filter和has_and_belongs_to_many关系

时间:2015-11-14 12:27:19

标签: angularjs

在我的应用中,我有3张桌子。电影,用户和电影用户。电影表有2个列,titlemovie_id。我的用户表有2个列,nameid。并且movies_users表在它们之间创建关系,这导致用户可以拥有许多电影,并且电影可以拥有许多用户。这很好用,但是当我使用"ng-repeat" => "movie in movies时,我会收到所有用户添加的所有电影。但我只想展示当前用户添加的电影。

所以我正在寻找一种方法来将Angular与电影和用户之间的has_and_belongs_to_many关系联系起来。

2 个答案:

答案 0 :(得分:1)

我的解决方案提案:

HTML:

<div ng-controller="MyCtrl">
    <ul>
        <li ng-repeat="movie in movies | filter: userHasMovie">{{movie.title}}</li>
    </ul>
</div>

JavaScript的:

var myApp = angular
.module('myApp',[])
.controller('MyCtrl', [ '$scope', function($scope) {
    $scope.movies = [
        { movie_id: 1, title: 'a' },
        { movie_id: 2, title: 'b' },
        { movie_id: 3, title: 'c' }
    ];

    $scope.users = [
        { id: 1, name: 'd' },
        { id: 2, name: 'e' }
    ];

    $scope.movies_users = [
        { movie_id: 1, user_id: 1 },
        { movie_id: 2, user_id: 2 },
        { movie_id: 3, user_id: 1 },
        { movie_id: 3, user_id: 2 }
    ];

    $scope.currentUser = $scope.users[0];

    $scope.userHasMovie = function (val, ndx, arr) {
        var i;
        for (i = 0; i < $scope.movies_users.length; i += 1) {
            if ($scope.movies_users[i].movie_id === val.movie_id &&
                $scope.movies_users[i].user_id === $scope.currentUser.id) {
                return true;
            }
        }
        return false;
    }
}]);

JSFiddle:http://jsfiddle.net/masa671/xageyfdv/

答案 1 :(得分:0)

查看angular的过滤器:

ng-repeat = "movie in movies | filter:{userId:userIdYouWantToFilterFor}"

它的工作方式与linux管道非常相似。 filter:{userId:userIdYouWantToFilterFor}返回movies的子集,其中包含属性userId匹配userIdYouWantToFilterFor

的所有对象
相关问题