2015-01-17 4 views
0

Я пытаюсь получить доступ к контроллеру videogular.API от другого, брата, контроллера.Доступ к контроллеру videogular.API от другого, брата, контроллера

Я прочитал и использовал примеры из videogular сайта и используя API, как это:

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

Это прекрасно работает, из ВНУТРИ videogular контроллера.

Я хотел бы начать и остановить видео с контроллера навигации. Этот контроллер не является родителем, а является родным братом.

Я создал событие $ широковещательного в нав:

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(); 
     }); 
    }] 
    ); 

Событие работает, поскольку отправленные данные регистрируются в консоли, когда я нажимаю кнопку на nav. Но я также получаю сообщение об ошибке:

Error: controller.API is null 

Почему это не работает из $ scope. $ On?

ответ

0

Может быть, вы теряете сферы, попробуйте с помощью .bind():

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

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

Высокий. Работал сперва. :-) –

Смежные вопросы