onYoutubeIFrameAPIReady 只触发一次
onYoutubeIFrameAPIReady only fired once
我有一个 angularjs 应用程序,我想在其中显示新闻源中的一些 YouTube 视频。
我创建了一个加载播放器的指令,我的视频在我第一次进入包含视频的视图时加载。但是,如果我离开视图,然后再次打开,则不会加载视频。
似乎事件 "onYouTubeIframeAPIReady" 只在我第一次进入视图时触发。
观点:
<div bind-html-compile="newsitem.description"></div>
newsitem.description 是原始的 html 作为 json 发送到应用程序。
所以它看起来像:
{'this is a video <youtube videoid="myYoutubeVideoId"></youtube>'}
这也是我使用 bind-html-compile 指令的原因。
指令
.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
});
};
}
}})
当我从 onYoutubeIFrameAPIReady console.log 时,我只在第一次得到输出..
所以我认为事件是在函数准备好之前以某种方式触发的,但我真的弄不明白。
有什么想法吗?
我遇到了同样的问题。阅读这篇文章,我假设您已经阅读了这篇文章,因为您的代码与文章的代码非常接近,您只是没有读到文章的底部:
http://blog.oxrud.com/posts/creating-youtube-directive/
我在底部找到了关于为什么会发生这种情况的解释,以及一个显示多个视频有效的演示。我还没有尝试自己修复它,但想回答你的问题:
我有一个 angularjs 应用程序,我想在其中显示新闻源中的一些 YouTube 视频。 我创建了一个加载播放器的指令,我的视频在我第一次进入包含视频的视图时加载。但是,如果我离开视图,然后再次打开,则不会加载视频。
似乎事件 "onYouTubeIframeAPIReady" 只在我第一次进入视图时触发。
观点:
<div bind-html-compile="newsitem.description"></div>
newsitem.description 是原始的 html 作为 json 发送到应用程序。
所以它看起来像:
{'this is a video <youtube videoid="myYoutubeVideoId"></youtube>'}
这也是我使用 bind-html-compile 指令的原因。
指令
.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
});
};
}
}})
当我从 onYoutubeIFrameAPIReady console.log 时,我只在第一次得到输出.. 所以我认为事件是在函数准备好之前以某种方式触发的,但我真的弄不明白。
有什么想法吗?
我遇到了同样的问题。阅读这篇文章,我假设您已经阅读了这篇文章,因为您的代码与文章的代码非常接近,您只是没有读到文章的底部:
http://blog.oxrud.com/posts/creating-youtube-directive/
我在底部找到了关于为什么会发生这种情况的解释,以及一个显示多个视频有效的演示。我还没有尝试自己修复它,但想回答你的问题: