我制作了两个指令,将swf对象嵌入到页面中以播放和录制视频。每个swf都使用一个全局函数来指示玩家事件。该播放器的代码类似于
JS:
scope: {
onVideoPlay: "&"
},
link: function(scope, element, attrs) {
window.PlayerFuncs = {
onPlay: function() {
scope.onVideoPlay();
}
}
}
HTML:
<my-video-directive on-video-play="parentFunc()"></my-video-directive>
记录器代码几乎相同,唯一的区别是window.PlayerFuncs只是名为window.RecorderFuncs,事件funcs是onVideoRecord等。
正如您所看到的,Flash播放器在播放时调用PlayerFuncs.onPlay(),并且该指令通过隔离范围onVideoPlay表达式将此信息传递给父控制器。该系统与录音机完美配合,但不适用于播放器。我已将scope.onVideoPlay()行从PlayerFuncs对象中拉出来测试我的语法,它在该对象外部完美地工作,但是一旦我把它放在那里它似乎没有绑定到parentFunc()表达式。控制台记录scope.onVideoPlay显示它仍然是某个角度的包装器,但显然某些东西不是parentFunc()。请记住,这个EXACT方法在录音机指令中完美运行。可能会发生什么?
我甚至试过这个:
link: function(scope, element, attrs) {
scope.doStuff = function() {
scope.onVideoPlay();
};
scope.doStuff();
window.PlayerFuncs = {
onPlay: function() {
scope.doStuff();
}
}
}
doStuff()
内的window.PlayerFuncs
来电不起作用,但外面的电话有效!
答案 0 :(得分:1)
尝试添加scope.$apply()
。
link: function(scope, element, attrs) {
window.PlayerFuncs = {
onPlay: function() {
scope.onVideoPlay();
scope.$apply();
}
}
}