【问题标题】:Access videogular's controller.API from a different, sibling, controller从不同的同级控制器访问 videogular 的 controller.API
【发布时间】:2015-01-17 10:01:06
【问题描述】:

我正在尝试从不同的同级控制器访问 videogular 的 controller.API。

我已阅读并使用了来自 videogular 网站的示例,并使用如下 API:

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

这在 videogular 控制器内工作正常。

我想从导航控制器开始和停止视频。此控制器不是父级,而是兄弟级。

我已经在导航中设置了一个 $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 内不起作用?

【问题讨论】:

    标签: angularjs-scope videogular


    【解决方案1】:

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

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

    【讨论】:

    • 太棒了。第一次尝试工作。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多