在我的应用中,我有3张桌子。电影,用户和电影用户。电影表有2个列,title
和movie_id
。我的用户表有2个列,name
和id
。并且movies_users表在它们之间创建关系,这导致用户可以拥有许多电影,并且电影可以拥有许多用户。这很好用,但是当我使用"ng-repeat" => "movie in movies
时,我会收到所有用户添加的所有电影。但我只想展示当前用户添加的电影。
所以我正在寻找一种方法来将Angular与电影和用户之间的has_and_belongs_to_many
关系联系起来。
答案 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;
}
}]);
答案 1 :(得分:0)
查看angular的过滤器:
ng-repeat = "movie in movies | filter:{userId:userIdYouWantToFilterFor}"
它的工作方式与linux管道非常相似。
filter:{userId:userIdYouWantToFilterFor}
返回movies
的子集,其中包含属性userId
匹配userIdYouWantToFilterFor