从不同的兄弟控制器访问视频监控器.API

时间:2015-01-17 10:01:07

标签: angularjs-scope videogular

我试图从另一个兄弟控制器访问视频监听器.API。

我已经阅读并使用了视频网站上的示例并使用了这样的API:

controller.pauseVideo = function() {
            controller.API.pause();
        };

这很好,来自视频控制器内部。

我想从导航控制器启动和停止视频。这个控制器不是父控制器,而是兄弟姐妹。

我在导航中设置了$ broadcast事件:

myApp.controller('navController', function($scope) {
    $scope.doPause = function() {  // added ng-click="doPause();" to nav link
         $scope.$parent.$broadcast('myCustomEvent', {
           someProp: 'Pause!' 
         }); 
       }
   });

在视频控制器中,我添加了一个':(使用类似的控制器设置为http://www.videogular.com/tutorials/videogular-api/处的演示)

myApp.controller('videoController', 
         ["$sce","$scope", function ($sce, $scope) {
            var controller = this;
            controller.API = null;

            controller.onPlayerReady = function(API) {
                controller.API = API;
            };

            ... other config settings ...


        $scope.$on('myCustomEvent', function (event, data) {
          console.log(data);
          controller.API.pause();
        });
    }]
    );

事件有效,因为当我单击导航中的按钮时,发送的数据会记录在控制台中。但我也得到错误:

Error: controller.API is null

为什么这不能在$ scope。$ on?

内工作

1 个答案:

答案 0 :(得分:0)

也许您正在失去范围,请尝试使用.bind():

controller.onMyCustomEvent = function (event, data) {
     console.log(data);
     controller.API.pause();
}

$scope.$on('myCustomEvent', controller.onMyCustomEvent.bind(controller));