2016-07-08 9 views
0

Ich habe ein Problem beim Klicken auf Bilder die mp3 abgespielt wird, aber wenn ich eine Abfrage auf ng-repeat mache, funktioniert es nicht mehr.NG-REPEAT Audioquelle Auswahl nach Klassenname

Es stammt aus dem getElementsByClassName-Index, aber ich muss es beheben. Gibt es einen guten Weg, um es mit eckigen wie ng-Audio arbeiten zu lassen?

<html> 
<heaD> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script> 

    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-audio/1.7.2/angular.audio.min.js"></script> 
    <script> 

     var app = angular.module('myApp', []); 

    app.controller('controller', ['$scope', function($scope) { 

      $scope.playit = function(id){ 
       var audio = document.getElementsByClassName("audio")[id]; 
       audio.play(); 
      } 

      $scope.data=[{ 
       id: 0, 
       categorie: ['Rectorat', 'General', 'Secretariate'], 
       denumire: 'Rectorat', 
       imagine: '1-RECTORAT.jpg', 
       linkAudio: "audio/rectorat-notgood.mp3", 
       descriereText: 'Bd. Mamaia nr. 124, etaj 1...', 
       linkHarta: '' 
       }, 
       { 
       id: 1, 
       categorie: ['Juridic', 'General', 'Secretariate'], 
       denumire: 'Juridic', 
       imagine: '1-RECTORAT.jpg', 
       linkAudio: "audio/rectorat-notgood.mp3", 
       descriereText: 'Bd. Mamaia nr. 124, etaj 1...', 
       linkHarta: '' 
       }, 
       { 
       id: 2, 
       categorie: ['Facultatea de Matematica si Informatica', 'Secretariate'], 
       denumire: 'Secretariat Facultatea de Matematica si Informatica', 
       imagine: '1-RECTORAT.jpg', 
       linkAudio: "audio/rectorat-notgood.mp3", 
       descriereText: 'indicatii', 
       linkHarta: '' 
       }, 
       { 
       id: 3, 
       categorie: ['Facultatea de Matematica si Informatica', 'Secretariate'], 
       denumire: 'Secretariat Facultatea de Matematica si Informatica', 
       imagine: '1-RECTORAT.jpg', 
       linkAudio: "audio/test.mp3", 
       descriereText: 'indicatii', 
       linkHarta: '' 
       }]; 
    }]); 

    </script> 
    <style> 
     .col-xs-12 { 
      padding-bottom:10px; 
     } 
     .col-sm-6 { 
      padding-bottom:10px; 
     } 
     .centrat { 
      margin: auto; 
     } 
    </style> 
</heaD> 
<body ng-app="myApp" data-ng-cloak data-ng-controller="controller"> 
    <div class="container-fluid"> 
     <div class="row"> 
      <div class="col-xs-12"> 
       <img src="img/logo-site.jpg" class="centrat img-responsive"></span> 
      </div> 
     </div> 
     <div class="row"> 
      <div class="col-lg-12" style="padding-bottom: 20px;"> 
     <input type="textarea" class="form-control" ng-model="query.categorie" placeholder="Cautare" style="width: 100%; height: 100px;"> 
      </div> 
     </div> 
     <div class="row" > 
      <div class="col-xs-12 col-sm-6 col-md-4 col-lg-2" ng-repeat="locatie in data | filter:query" > 
       <div > 

        <img class="img-responsive" ng-src="img/{{locatie.imagine}}" style="margin: auto;" ng-click="playit(locatie.id)"> 
         <audio class="audio" ng-src="{{locatie.linkAudio}}" ></audio> 
        </img> 

        <p style="font-size: 10px;">{{locatie.denumire}} | 
        {{locatie.descriereText}}</p> 
       </div> 
      </div> 
     </div> 
    </div> 

</body> 
</html> 

Antwort

0

ich Ihren Code zu beheben, ist es Arbeit für mich

<!DOCTYPE html> 
 
<html> 
 
<heaD> 
 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script> 
 

 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-audio/1.7.2/angular.audio.min.js"></script> 
 
    <script> 
 

 
     var app = angular.module('myApp', []); 
 

 
    app.controller('controller', ['$scope', '$sce', function($scope, $sce) { 
 

 
    \t \t var arrayPL = document.getElementsByClassName("audio"); 
 

 
      $scope.playit = function(id){ 
 
       var audio = arrayPL[id]; 
 

 
\t   if (audio.paused === false) { 
 
\t    audio.pause(); 
 
\t   } else { 
 
\t    audio.play(); 
 
\t   } 
 
      } 
 

 
      $scope.data=[{ 
 
       id: 0, 
 
       categorie: ['Rectorat', 'General', 'Secretariate'], 
 
       denumire: 'Rectorat', 
 
       imagine: 'https://cdn2.iconfinder.com/data/icons/web-interface-icons/66/Img-512.png', 
 
       linkAudio: "http://muz-tv.ru/audio/a/3/a38b663b5b2a98220266a56529ae75de.mp3?id=843", 
 
       descriereText: 'Bd. Mamaia nr. 124, etaj 1...', 
 
       linkHarta: '' 
 
       }, 
 
       { 
 
       id: 1, 
 
       categorie: ['Juridic', 'General', 'Secretariate'], 
 
       denumire: 'Juridic', 
 
       imagine: 'https://cdn2.iconfinder.com/data/icons/web-interface-icons/66/Img-512.png', 
 
       linkAudio: "http://muz-tv.ru/audio/a/3/a38b663b5b2a98220266a56529ae75de.mp3?id=843", 
 
       descriereText: 'Bd. Mamaia nr. 124, etaj 1...', 
 
       linkHarta: '' 
 
       }, 
 
       { 
 
       id: 2, 
 
       categorie: ['Facultatea de Matematica si Informatica', 'Secretariate'], 
 
       denumire: 'Secretariat Facultatea de Matematica si Informatica', 
 
       imagine: 'https://cdn2.iconfinder.com/data/icons/web-interface-icons/66/Img-512.png', 
 
       linkAudio: "http://muz-tv.ru/audio/a/3/a38b663b5b2a98220266a56529ae75de.mp3?id=843", 
 
       descriereText: 'indicatii', 
 
       linkHarta: '' 
 
       }, 
 
       { 
 
       id: 3, 
 
       categorie: ['Facultatea de Matematica si Informatica', 'Secretariate'], 
 
       denumire: 'Secretariat Facultatea de Matematica si Informatica', 
 
       imagine: 'https://cdn2.iconfinder.com/data/icons/web-interface-icons/66/Img-512.png', 
 
       linkAudio: "http://muz-tv.ru/audio/a/3/a38b663b5b2a98220266a56529ae75de.mp3?id=843", 
 
       descriereText: 'indicatii', 
 
       linkHarta: '' 
 
       }]; 
 

 
       $scope.trustURL = function (url) { 
 
       \t return $sce.trustAsResourceUrl(url); 
 
       } 
 
    }]); 
 

 
    </script> 
 
    <style> 
 
     .col-xs-12 { 
 
      padding-bottom:10px; 
 
     } 
 
     .col-sm-6 { 
 
      padding-bottom:10px; 
 
     } 
 
     .centrat { 
 
      margin: auto; 
 
     } 
 
     .img-responsive { 
 
      width: 100px; 
 
     } 
 
    </style> 
 
</heaD> 
 
<body ng-app="myApp" data-ng-cloak data-ng-controller="controller"> 
 
    <div class="container-fluid"> 
 
     <div class="row"> 
 
      <div class="col-xs-12"> 
 
       <img src="img/logo-site.jpg" class="centrat img-responsive"> 
 
      </div> 
 
     </div> 
 
     <div class="row"> 
 
      <div class="col-lg-12" style="padding-bottom: 20px;"> 
 
     <input type="textarea" class="form-control" ng-model="query.categorie" placeholder="Cautare" style="width: 100%; height: 100px;"> 
 
      </div> 
 
     </div> 
 
     <div class="row" > 
 
      <div class="col-xs-12 col-sm-6 col-md-4 col-lg-2" ng-repeat="locatie in data | filter:query" > 
 
       <div > 
 

 
        <img class="img-responsive" ng-src="{{trustURL(locatie.imagine)}}" ng-click="playit(locatie.id)"> 
 
         <audio class="audio" ng-src="{{trustURL(locatie.linkAudio)}}" ></audio> 
 
        <p style="font-size: 10px;">{{locatie.denumire}} | 
 
        {{locatie.descriereText}}</p> 
 
       </div> 
 
      </div> 
 
     </div> 
 
    </div> 
 

 
</body> 
 
</html>

+0

Hallo, danke. Aber es funktioniert nicht, wenn Sie im Eingabefeld nach etwas suchen. –

+0

Ich denke, Sie müssen benutzerdefinierte Suchfilter erstellen, Filter muss Elemente in Array "Kategorie" iterieren und Objekt zurückgeben –

0

Hinweise:

  1. Sie müssen $sce.trustAsResourceUrl verwenden, dann sind Sie in der Lage Verwenden Sie die vorstellen und linkAudio;
  2. die Audios zu filtern durch ihre categories, Sie brauchen nicht einen benutzerdefinierten Filter zu tun, können Sie einfach in ihm ein tiefes Array-Filter tun, wie folgt aus:

    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-2" ng-repeat="locatie in data | filter: { categories: search }">

Hier ist ein Ausschnitt Arbeits:

(function() { 
 
    "use strict"; 
 
    angular.module('app', []) 
 
    .controller('mainCtrl', function($scope, $sce) { 
 
     var audioItems = document.getElementsByClassName("audio"); 
 
    
 
     $scope.play = function(locatie) { 
 
     var audio = audioItems[locatie.id]; 
 
    
 
     if (!audio.paused) { 
 
      audio.pause(); 
 
     } else { 
 
      audio.play(); 
 
     } 
 
     } 
 
    
 
     $scope.data = [ 
 
     { 
 
      "id":0, 
 
      "categories":[ 
 
       "Rectorat", 
 
       "General", 
 
       "Secretariate" 
 
      ], 
 
      "denumire":"Rectorat", 
 
      "imagine":"https://cdn2.iconfinder.com/data/icons/web-interface-icons/66/Img-512.png", 
 
      "linkAudio":"http://muz-tv.ru/audio/a/3/a38b663b5b2a98220266a56529ae75de.mp3?id=843", 
 
      "descriereText":"Bd. Mamaia nr. 124, etaj 1...", 
 
      "linkHarta":"" 
 
     }, 
 
     { 
 
      "id":1, 
 
      "categories":[ 
 
       "Juridic", 
 
       "General", 
 
       "Secretariate" 
 
      ], 
 
      "denumire":"Juridic", 
 
      "imagine":"https://cdn2.iconfinder.com/data/icons/web-interface-icons/66/Img-512.png", 
 
      "linkAudio":"http://muz-tv.ru/audio/a/3/a38b663b5b2a98220266a56529ae75de.mp3?id=843", 
 
      "descriereText":"Bd. Mamaia nr. 124, etaj 1...", 
 
      "linkHarta":"" 
 
     }, 
 
     { 
 
      "id":2, 
 
      "categories":[ 
 
       "Facultatea de Matematica si Informatica", 
 
       "Secretariate" 
 
      ], 
 
      "denumire":"Secretariat Facultatea de Matematica si Informatica", 
 
      "imagine":"https://cdn2.iconfinder.com/data/icons/web-interface-icons/66/Img-512.png", 
 
      "linkAudio":"http://muz-tv.ru/audio/a/3/a38b663b5b2a98220266a56529ae75de.mp3?id=843", 
 
      "descriereText":"indicatii", 
 
      "linkHarta":"" 
 
     }, 
 
     { 
 
      "id":3, 
 
      "categories":[ 
 
       "Facultatea de Matematica si Informatica", 
 
       "Secretariate" 
 
      ], 
 
      "denumire":"Secretariat Facultatea de Matematica si Informatica", 
 
      "imagine":"https://cdn2.iconfinder.com/data/icons/web-interface-icons/66/Img-512.png", 
 
      "linkAudio":"http://muz-tv.ru/audio/a/3/a38b663b5b2a98220266a56529ae75de.mp3?id=843", 
 
      "descriereText":"indicatii", 
 
      "linkHarta":"" 
 
     } 
 
     ]; 
 
    
 
     // You can use map to set all your url items to be trusted, as follows: 
 
     $scope.data.map(function(value) { 
 
     value.imagine = $sce.trustAsResourceUrl(value.imagine); 
 
     value.linkAudio = $sce.trustAsResourceUrl(value.linkAudio); 
 
     }) 
 
    }); 
 
})();
.col-xs-12 { 
 
    padding-bottom: 10px; 
 
} 
 

 
.col-sm-6 { 
 
    padding-bottom: 10px; 
 
} 
 

 
.centrat { 
 
    margin: auto; 
 
}
<!DOCTYPE html> 
 
<html ng-app="app"> 
 

 
<head> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js" type="text/javascript"></script> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/js/bootstrap.min.js"></script> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script> 
 
    <link rel="stylesheet" href="//cdn.jsdelivr.net/bootstrap/3.3.6/css/bootstrap.min.css"> 
 
</head> 
 

 
<body ng-cloak ng-controller="mainCtrl"> 
 
    <div class="container-fluid"> 
 
    <div class="row"> 
 
     <div class="col-xs-12"> 
 
     <img src="http://a5.mzstatic.com/us/r30/Purple/v4/8d/42/72/8d427222-6310-a43f-5d79-13c3a24c0ce5/icon128-2x.png" class="centrat img-responsive"> 
 
     </div> 
 
    </div> 
 
    <div class="row"> 
 
     <div class="col-lg-12" style="padding-bottom: 20px;"> 
 
     <input type="textarea" class="form-control" ng-model="search" placeholder="Filter" style="width: 100%; height: 100px;"> 
 
     </div> 
 
    </div> 
 
    <div class="row"> 
 
     <div class="col-xs-12 col-sm-6 col-md-4 col-lg-2" ng-repeat="locatie in data | filter: { categories: search }"> 
 
     <div> 
 
      <img class="img-responsive" ng-src="{{locatie.imagine}}" ng-click="play(locatie)"> 
 
      <audio class="audio" ng-src="{{locatie.linkAudio}}"></audio> 
 
      <p style="font-size: 10px;" ng-bind="locatie.denumire + ' | ' + locatie.descriereText"> 
 
     </div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</body> 
 

 
</html>