Angular ngrepeat array using directive 中的多个项目

Angular ngrepeat multiple items in an array using directive

我需要列出多个具有不同信息(歌曲名称、艺术家姓名、专辑名称、专辑图片)的项目。这些信息位于 angular 指令的数组中,我需要使用元素注入将它们注入到单独的 templateUrl 中。这是指令

 app.directive('songList', function($filter) {
   return {
     restrict: 'E',
     templateUrl: $filter('baseUrl')("/content/mobile/app/views/addmusic/songList.html"),
     controller: function($scope, $timeout) {
       $scope.loadMoreSongs = function() {
         $scope.busy = true;
         $timeout(function() {
           $scope.offset += $scope.pageSize;
           if ($scope.offset > $scope.songs.length)
             $scope.offset = $scope.songs.length;
           $scope.busy = false;
         }, 300);
       };

       $scope.songs = [{
         "id": 1,
         "songName": "Children of the Sea",
         "artistName": "Black         Sabbath",
         "albumName": "Heaven and Hell",
         "thumbnailUrl": "http://upload.wikimedia.org/wikipedia/en/f/f8/Black_Sabbath_Heaven_and_Hell.jpg"
       }, {
         "id": 2,
         "songName": "Turbo Lover",
         "artistName": "Judas Priest",
         "albumName": "Turbo Lover",
         "thumbnailUrl": "http://upload.wikimedia.org/wikipedia/en/8/8a/Judas_Priest_Turbo.jpg"
       }, {
         "id": 3,
         "songName": "High Hopes",
         "artistName": "Pink Floyd",
         "albumName": "Divison Bell",
         "thumbnailUrl": "http://upload.wikimedia.org/wikipedia/el/9/96/Pink_floyd_the_division_bell_front.jpg"
       }, {
         "id": 4,
         "songName": "When a Blind Man Cries",
         "artistName": "Deep Purple",
         "albumName": "Machine Head",
         "thumbnailUrl": "http://www.inthestudio.net/wp-content/uploads/2012/08/deep_purple_machine_head_640x640.jpg"
       }, {
         "id": 5,
         "songName": "Amamos La Vida",
         "artistName": "Accept",
         "albumName": "Objection Overruled",
         "thumbnailUrl": "https://farm8.staticflickr.com/7051/6982758045_167210f89e.jpg"
       }];
     },
     controllerAs: 'song'
   }
 });

这是显示一首歌曲的 templateUrl (songListItem.html):

<li class="media">
  <a ng-href="#">
    <div class="song-names-container">
      <div class="img-container media-left">
        <img class="media-object img-frame" src="{{song.thumbnailUrl}}" alt="" />
      </div>
      <div class="media-body">
        <h3><strong>{{song.songName}}</strong></h3>
        <div>
          <p>{{song.artistName}} - {{song.albumName}}</p>
        </div>
      </div>
    </div>
  </a>
</li>

这是主 html 页面 (songList.html),ngrepeat 应该在其中运行并显示歌曲列表:

<div class="add-music-form">
  <div class="modal-header">
    <input type="search" class="form-control" placeholder="Search over 15 million songs..." />
  </div>
  <div class="song-names-title">
    <p>Songs</p>
  </div>
  <div class="modal-body">
    <ul class="media-list">
      <song-list-item ng-repeat="song in songs"></song-list-item>
    </ul>
    <div class="more-songs"></div>
    <div class="album-names-title"></div>
    <div class="album-names"></div>
  </div>
</div>

如有任何帮助,我们将不胜感激。

song 就像一个实例变量,所以仅仅因为它在模板和 ng-repeat 中被命名为相同的东西,并不意味着它们是连接的。

您需要修改您的指令,使其接受一个属性,然后将歌曲传递给该属性,我认为它看起来像这样:

<div ng-repeat="song in songs">
    <song-list-item song-data={{song}}></song-list-item>
</div>

找到解决方案。我没有在任何地方放置 songList 指令。我添加了 index.html 文件,并将其包含在其中。

<div class="musicMain" ng-controller="BasicAppCtrl">
    <song-list></song-list>
</div>

<ul class="media-list">
           <song-list-item data-model="song" ng-repeat="song in songs"></song-list-item>
</ul>

就是这样。