Я использую Ionic Framework с AngularJS и плагином ngCordova Media: http://ngcordova.com/docs/plugins/media/
В настоящее время у меня есть две функции в моем контроллере;
Воспроизведение — эта функция воспроизводит выбранный источник мультимедиа.
$scope.play = function(src) { media = $cordovaMedia2.newMedia(src, null, null, mediaStatusCallback); media.play(); $scope.isPlaying = true; $ionicLoading.hide(); } }
Следующая песня — эта функция получает src следующей песни в списке, просматривая индекс текущего объекта песни и выбирая следующий объект в списке.
$scope.nextSong = function (song_id) { var index = $scope.allsongs.indexOf(song_id); if(index >= 0 && index < $scope.allsongs.length - 1) { $scope.nextsongid = $scope.allsongs[index + 1] $scope.playMusic($scope.nextsongid); //the playMusic function just looks up the src of the song and parses to the play function } }
Вот функция playMusic, которая вызывается выше:
$scope.playMusic = function(music_id)
{
myService.getSongInfo(music_id)
.then(function(data){
$scope.cursong = data.results;
$scope.play($scope.cursong.src);
});
};
И в моем шаблоне кнопка next просто вызывает функцию nextSong с текущим идентификатором песни:
<div class="next" ng-click="nextSong('{{cursong.id}}')"></div>
Проблема, с которой я столкнулся, заключается в том, что когда я нажимаю следующую кнопку в первый раз, она воспроизводит следующую песню, но когда я нажимаю ее снова, она снова воспроизводит ту же песню. Кажется, что значение currsong не обновляется.
Вот как выглядит массив allsongs:
["1631922", "1502059", "1365874", "1607940", "1251204", "1233296", "1151847", "1119737", "1086438", "1078140", "1068172", "1065312", "845339", "799161", "316293", "306073", "299817", "1603940"]
Обновление: я пытался использовать интервал
У меня есть функция интервала, которая переходит к следующей песне, когда время достигает продолжительности. Я вызываю там функцию nextsong, и она отлично работает.
$scope.Timer = $interval(function () {
$scope.cursongduration = $scope.cursong.duration;
$scope.cursongid = $scope.cursong.id;
if($scope.currduration >= $scope.cursongduration){
$scope.nextSong($scope.cursongid);
}, 1000);
};
Итак, мой вопрос: почему вызов nextSong через кнопку шаблона также работает? Мне кажется, что cursong.id не обновляется в шаблоне после 1 раза по какой-то странной причине. Я также пытался использовать переменную cursongid, которая установлена в интервале в кнопке шаблона, но не повезло:
<div class="next" ng-click="nextSong('{{cursongid}}')"></div>