我在AngularJS中有一个通过YouTube IframeAPI播放(等)YouTube视频的指令。
在指令正文中,我将通过
检查IframeAPI是否准备就绪var playerReady = $q.defer();
window.onYouTubeIframeAPIReady = function() {
console.log('YouTube API is ready.')
playerReady.resolve();
}
这只执行一次。
然后,我有
return {restrict: 'E',
link: function(scope, element, attrs) {
以及我正在观看范围变量的地方,但这在这里并不重要。
然后,当我的youtube元素被创建时,我可以在链接函数init中使用 playerReady.promise.then(...
)
这是在scope.$watch
回调中。
这很好用,如果我的youtube
元素出现在第一条路线中,即使视频只是稍后设置(我有ng-show=..."
隐藏它,直到在范围内触发某个事件,链接器函数也在范围内监视此对象,但如果稍后导航到它(即第一个路由没有我的youtube元素),我就无法再解析playerReady。
总结一下,如果youtube iframe api准备好并因此解析我的playerReady
,我怎样才能动态测试?我可以在我的范围观察者中做到这一点。
这在指令体中解决了问题
setTimeout(function(){
playerReady.resolve();
},3000);
但并不是它的制作方式。