指令“&”表达不起作用

时间:2014-08-07 15:07:46

标签: angularjs angularjs-directive

我制作了两个指令,将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来电不起作用,但外面的电话有效!

1 个答案:

答案 0 :(得分:1)

尝试添加scope.$apply()

link: function(scope, element, attrs) {

    window.PlayerFuncs = {
        onPlay: function() {
            scope.onVideoPlay();
            scope.$apply();
        }
    }

}