我有一个部分与以下片段
<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>
我正在解决一个问题,即angular-soundmanager2库中的play-pause-toggle指令无法正常工作。它在我第一次加载页面时工作。如果我加载第二个声音,我有代码删除其他声音。 这会删除其他声音,但新声音不会播放。 如果我在控制台内的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);
})
答案 0 :(得分:2)
将它放在一个将驻留在控制器范围内的函数中并尝试调用代码soundManager.sounds [soundManager.soundIDs [0]]。play()
希望这会有所帮助。答案 1 :(得分: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>