2015-10-20 11 views
0

У меня есть приложение angularjs, где я хочу показать некоторые видеоролики youtube в ленте новостей. Я создал директиву для загрузки проигрывателя, и мои видео загружаются в первый раз, когда я вхожу в представление, содержащее видео. Но если я оставлю представление и снова открою видео, видео не будет загружено.onYoutubeIFrameAPIReady только один раз

Кажется, что событие «onYouTubeIframeAPIReady» запускается только при первом входе в представление.

Вид:

 <div bind-html-compile="newsitem.description"></div> 

newsitem.description сырой HTML отправить в приложение в виде JSON.

так это может выглядеть следующим образом:

{'this is a video <youtube videoid="myYoutubeVideoId"></youtube>'} 

Это также объясняет, почему им с помощью привязки в HTML-компиляции директивы.

директива

.directive('youtube', function($window) { 
return { 
    restrict: "E", 

    scope: { 
     videoid: "@" 
    }, 

    template: '<div></div>', 

    link: function(scope, element, attrs) { 
     var tag = document.createElement('script'); 
     tag.src = "https://www.youtube.com/iframe_api"; 
     var firstScriptTag = document.getElementsByTagName('script')[0]; 
     firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 

     var player; 

     $window.onYouTubeIframeAPIReady = function() { 
      player = new YT.Player(element.children()[0], { 
       playerVars: { 
        autoplay: 0, 
        html5: 1, 
        theme: "light", 
        modesbranding: 1, 
        color: "white", 
        iv_load_policy: 3, 
        showinfo: 0, 
        controls: 0, 
        rel: 0, 
       }, 
       videoId: scope.videoid 
      }); 
     }; 
    } 
}}) 

Когда я console.log от onYoutubeIFrameAPIReady я только получить выводим первый раз .. Так им думать, что это событие как-то срабатывает, прежде чем функция будет готова, но я могу Реально это выяснить.

Любые идеи?

ответ

3

У меня такая же проблема. Читая эту статью, в которой я предполагаю, что вы следовали, поскольку ваш код довольно близко к коду статьи, вы просто не читали в нижней части статьи:

http://blog.oxrud.com/posts/creating-youtube-directive/

я нашел на дне ап объяснение того, почему это происходит, и демонстрацию, показывающую работу нескольких видеороликов. Я не пытался исправить это сам еще, но хотел бы ответить на ваш вопрос:

http://run.plnkr.co/plunks/8lxuN8/

+0

Подтверждено это работает. Используя фабрику, я вижу все мои видео. – Squiggler

+0

Ровно что мне нужно .. спасибо! – OngoBoingo

Смежные вопросы