Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs onYoutubeIFrameAPIReady只发射一次_Angularjs_Angularjs Directive_Youtube Iframe Api - Fatal编程技术网

Angularjs onYoutubeIFrameAPIReady只发射一次

Angularjs onYoutubeIFrameAPIReady只发射一次,angularjs,angularjs-directive,youtube-iframe-api,Angularjs,Angularjs Directive,Youtube Iframe Api,我有一个angularjs应用程序,我想在新闻提要中显示一些youtube视频。 我已经创建了一个加载播放器的指令,我的视频在第一次输入包含视频的视图时加载。但是如果我离开视图并再次打开,视频将不会加载 似乎“onYouTubeIframeAPIReady”事件仅在我第一次进入视图时触发 视图: <div bind-html-compile="newsitem.description"></div> newsitem.description是以jso

我有一个angularjs应用程序,我想在新闻提要中显示一些youtube视频。 我已经创建了一个加载播放器的指令,我的视频在第一次输入包含视频的视图时加载。但是如果我离开视图并再次打开,视频将不会加载

似乎“onYouTubeIframeAPIReady”事件仅在我第一次进入视图时触发

视图:

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

newsitem.description是以json格式发送到应用程序的原始html

所以它可能看起来像:

{'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
            });
        };
    }
}})
指令('youtube',函数($window){
返回{
限制:“E”,
范围:{
videoid:“@”
},
模板:“”,
链接:函数(范围、元素、属性){
var tag=document.createElement('script');
tag.src=”https://www.youtube.com/iframe_api";
var firstScriptTag=document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(标记,firstScriptTag);
var播放器;
$window.onYouTubeIframeAPIReady=函数(){
player=新的YT.player(element.children()[0]{
playerVars:{
自动播放:0,
html5:1,
主题:“光”,
模式分解:1,
颜色:“白色”,
iv_负载_策略:3,
showinfo:0,
控件:0,
rel:0,
},
videoId:scope.videoId
});
};
}
}})
当我从onYoutubeIFrameAPIReady中输入console.log时,我只在第一次获得输出。。 所以我认为这个事件是在函数准备好之前触发的,但我真的搞不清楚


有什么想法吗?

我也有同样的问题。阅读这篇文章,我假设您已经阅读了,因为您的代码与文章的代码非常接近,您只是没有阅读到文章的底部:

我在底部找到了一个解释,解释了为什么会这样,还有一个演示,展示了多个视频的工作原理。我还没有尝试自己修复它,但我想回答您的问题:


我也有同样的问题。阅读这篇文章,我假设您已经阅读了,因为您的代码与文章的代码非常接近,您只是没有阅读到文章的底部:

我在底部找到了一个解释,解释了为什么会这样,还有一个演示,展示了多个视频的工作原理。我还没有尝试自己修复它,但我想回答您的问题:


我也有同样的问题。阅读这篇文章,我假设您已经阅读了,因为您的代码与文章的代码非常接近,您只是没有阅读到文章的底部:

我在底部找到了一个解释,解释了为什么会这样,还有一个演示,展示了多个视频的工作原理。我还没有尝试自己修复它,但我想回答您的问题:


我也有同样的问题。阅读这篇文章,我假设您已经阅读了,因为您的代码与文章的代码非常接近,您只是没有阅读到文章的底部:

我在底部找到了一个解释,解释了为什么会这样,还有一个演示,展示了多个视频的工作原理。我还没有尝试自己修复它,但我想回答您的问题:


证实了这一点。使用一个工厂,我现在看到我所有的视频播放。确认这是有效的。使用一个工厂,我现在看到我所有的视频播放。确认这是有效的。使用一个工厂,我现在看到我所有的视频播放。确认这是有效的。使用工厂,我现在可以看到我所有的视频播放。