У меня есть HTML аудиоплеер, вызываемый как часть директивы в AngularJS. На странице refre sh проигрыватель работает отлично - я могу установить источник и воспроизводить аудио - консоль записывает это: Однако, если я перехожу к другому состоянию в моем приложении и ТО загружаю / играю аудио, 2 экземпляра аудио начинают играть. Если я посещу 4 состояния перед воспроизведением, будет воспроизводиться 4 экземпляра звука! Консоль регистрирует это:
Почему аудиопроигрыватель запускается снова и снова? Как я могу сохранить его активным при перемещении между состояниями? Я не хочу уничтожать его и повторно инициализировать каждый раз, когда я меняю состояние, что приведет к прерыванию воспроизведения звука.
Вот соответствующий код. По сути, нижний колонтитул вида. html содержит директиву и игрока и включается каждым состоянием.
index. html:
...
<div style="clear:both"></div>
<div ui-view="footer"></div>
</body>
app. js:
.state('audiolist', {
url: '/audiolist/',
views: {
sideNav: {
templateUrl: 'views/sideNav.html',
controller: 'sideNavController'
},
header: {
templateUrl: 'views/header.html',
controller: 'headerController'
},
content: {
templateUrl: 'views/list.main.html',
controller: 'listController as content'
},
footer: {
templateUrl: 'views/footer.html',
controller: 'apController as ap'
}
})
...
.state('saveditems', {
url: '/saveditems/',
views: {
sideNav: {
templateUrl: 'views/sideNav.html',
controller: 'sideNavController'
},
header: {
templateUrl: 'views/header.html',
controller: 'headerController'
},
content: {
templateUrl: 'views/saveditems.main.html',
controller: 'savedItemsController as content'
},
footer: {
templateUrl: 'views/footer.html',
controller: 'apController as ap'
}
}
...
нижний колонтитул. html
<div class="audioplayer">
<!-- Audio Player -->
<hls-player id="player" playlist="{{ap.tracks}}"></hls-player>
...
директивы / hlsPlayer. js
module.directive('hlsPlayer', function ($window, $templateRequest, $compile, $http, $rootScope) {
return {
restrict: 'AE',
link: function ($scope, element, attrs) {
$templateRequest("views/playerTemplate.html").then(function (html) {
// player functions
...
// play function
...
console.log("manifest loaded, found " + data.qualities + " quality level");
console.log("audio loaded and playing");
...
playerTemplate. html
...
<audio autobuffer preload="metadata" src="" id="radio" class="hidden" preload="none"></audio>
...