2016-08-25 81 views
0

調用JavaScript對象我有一個部分與下面的代碼片段如何從一個局部

<div id="playDiv" ng-show="audioAvailable"> 
    <br/> 
    <button play-pause-toggle data-play="Play" data-pause="Pause">Play</button> 
    <button ng-click="soundManager.sounds[soundManager.soundIDs[0]].play()">Play</button> 
</div> 

我解決,其中來自角soundmanager2庫的播放暫停切換指令未能問題工作。它在我第一次加載頁面時工作。如果我加載第二個聲音,我有刪除其他聲音的代碼。 這將刪除其他聲音,但新聲音不播放。 如果我在控制檯內的ng-click內運行代碼,則聲音播放......並且在我從控制檯播放聲音後,播放暫停切換按鈕再次運行。

如何使ng-click指令調用soundManager.sounds [soundManager.soundIDs [0]]。play()?

以下是清除舊聲音的控制器代碼。

angular.module('infosystem',['angularSoundManager']).controller("insightsDetailCtrl", function ($scope, $stateParams, $rootScope, $http, $sce) { 

     var debug = true ; 

     SC.initialize({ 
     client_id: "YOUR_SOUNDCLOUD_CLIENT_ID" 
     }); 

     if (!$rootScope.soundManagerObjects) { 
      $rootScope.soundManagerObjects = [] ; 
     } 

     function soundManagerIdCheck(id){ 
      var result = false ; 
      if (soundManager) { 
       var sound = soundManager.getSoundById(id) ; 
       if (sound) { 
        result = true ; 
       } 
      } 
      return result ; 
     } 

    function asyncLoop(o) { 
     var i = -1; 
     var loop = function() { 
      i++; 
      if(i == o.length) { 
           o.callback(); 
       return; 
      } 
      o.functionToLoop(loop, i); 
     }; 
     loop(); //init 
    } 


     $scope.loading_insights = true; 
    $scope.load_insight = function (insight_id) { 
     $scope.loading_insights = true; 
     $http({ 
      method: 'GET', 
      url: $rootScope.serverURL + 'insights/' + insight_id, 
      headers: { 
       'Accept': 'application/json' 
      } 
     }) 
       .success(function (data) { 
        $scope.loading_insights = false; 
        data.description=$sce.trustAsHtml(data.description); 
        data.audio=$sce.trustAsHtml(data.audio); 
        $scope.insight = data; 

             $rootScope.audioAvailable = false ; 

             if (data.soundcloud_track) { 

              SC.stream('/tracks/' + data.soundcloud_track.id , function(sm_object){ 

              var track = { 
                id: data.soundcloud_track.id, 
                title: data.soundcloud_track.title, 
                artist: data.soundcloud_track.artist, 
              url: sm_object.url 
              }; 

               $rootScope.audioAvailable = true ; 
               $rootScope.smId = sm_object.id ; 
              var smIdsLength = soundManager.soundIDs.length; 

              asyncLoop({ 
               length: smIdsLength, 
               functionToLoop: function(loop, i) { 
                setTimeout(function() { 
                 //custom code 
                     var soundManagerId = soundManager.soundIDs[0] ; 
                     if (soundManagerIdCheck(soundManagerId)){ 
                      soundManager._wD('soundManager.stop(' + soundManagerId + ')', 1); 
                     } 

                 if (soundManagerId) { 
                      if ($rootScope.smId != soundManagerId) { 
                       soundManager.destroySound(soundManagerId); 
                      } 
                     } 
                 //custom code 
                 loop(); 
                }, 100); 
               }, 
            callback: function() { 
             //callback custom code 

             //callback custom code 
            } 
               } 
              ); 




              }) ;           

             } 
       }) 
       .error(function (error) { 
        $scope.loading_insights = false; 
       }) 
    } 
    $scope.load_insight($stateParams.insight_id); 
}) 

回答

2

有它在其中將駐留在控制器的範圍,並嘗試調用代碼soundManager.sounds [soundManager.soundIDs [0]。打(函數)

希望這會有所幫助。

+0

這就是我所做的。 –

0

它曙光對我添加一個函數$ scope並調用它。

我將下面的代碼添加到控制器。

$scope.playFirstSoundManagerSound = function() { 
     soundManager.sounds[soundManager.soundIDs[0]].play() 
    } 

,改變了偏

<div id="playDiv" ng-show="audioAvailable"> 
    <br/> 
    <button ng-click="playFirstSoundManagerSound()">Play</button> 
</div>