仅显示与用户关联的内容

时间:2015-11-14 17:02:04

标签: angularjs

我有一个提出请求的服务,

.factory('movieService', ['$http', function($http) {
  return {
    loadMovies: function() {
      return $http.get('/movies_users.json');
    }
  };
}])

这是JSON输出,是两个表连接的结果。用户表和电影表。如您所见,用户与一部或多部电影相关联。

[
  {"id":1,
  "email":"peter@peter.nl",
    "movies":[
      {
        "id":4,
        "title":"Creed",
        movie_id":"312221"
      },
      {
      "id":5,
        "title":"Star Wars: Episode VII - The Force Awakens",
        "movie_id":"140607"
      }
    ]
  },

  {"id":2,
  "email":"jan@jan.com",
    "movies":[
      {
        "id":4,
        "title":"Creed",
        movie_id":"312221"
      }
    ]
  }
]

然后我在我的控制器中有这个功能,

movieService.loadMovies().then(function(response) {
  $scope.movies = response.data;
});

这会将服务中的数据存储到电影范围内。

如果我这样做,

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

ng-repeat显示所有用户添加的所有电影。我如何才能在视图中显示与当前用户关联的电影?

2 个答案:

答案 0 :(得分:1)

这似乎是你想要的 - 让我知道它是否有帮助。 请注意,"上额外movie_id"肯定没有帮助

angular.module('myApp', [])
  .controller('ctrl', function($scope) {
    $scope.users = [
  {"id":1,
  "email":"peter@peter.nl",
    "movies":[
      {
        "id":4,
        "title":"Creed",
        movie_id:"312221"
      },
      {
      "id":5,
        "title":"Star Wars: Episode VII - The Force Awakens",
        "movie_id":"140607"
      }
    ]
  },

  {"id":2,
  "email":"jan@jan.com",
    "movies":[
      {
        "id":4,
        "title":"Creed",
        movie_id:"312221"
      }
    ]
  }
];
  });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="ctrl">

  <div ng-repeat="user in users">
      {{user.email}}
    <div ng-repeat="movie in user.movies">
      {{movie.title}}
    </div>
  </div>
  
  <h2>Movies for user 2</h2>
    <div ng-repeat="movie in users[1].movies">
      {{movie.title}}
    </div>
  
</div>

答案 1 :(得分:0)

在快速谷歌搜索中找到: How do I filter an array with AngularJS and use a property of the filtered object as the ng-model attribute?

$(".upload_button").click(function(event){

    event.preventDefault();

    $.ajax({
      url:'upload',
      data:new FormData($("#upload_form")[0]),
      dataType:"json",
      async:false,
      type:"post",
      processData: false,
      contentType: false,
      success:function(response){
        alert(response);
      }
    });
});

编辑:看起来你实际上有一个用户列表,所以你可以对用户的ngrepeat进行过滤,然后你就可以在电影上嵌套ngrepeat(未经过滤,因为它们附在用户身上)。但是,根据您的应用程序实际需要的工作方式,您可以在数据恢复时过滤掉数据并丢弃您不需要的用户。其中介绍了这个问题,您是否可以访问服务器端代码?如果是这样,您可以在那里进行过滤,而不是首先返回与其他用户关联的数据