0

別の兄弟のコントローラーから 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!' 
         }); 
       }
   });

videocontroller に「リスナー」を追加しました: ( 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 内から機能しないのはなぜですか?

4

1 に答える 1

0

スコープを失っている可能性があります。.bind() を使用してみてください。

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

$scope.$on('myCustomEvent', controller.onMyCustomEvent.bind(controller));
于 2015-01-20T10:14:44.803 に答える