从不同的兄弟控制器访问 videogular 的 controller.API
Access videogular's controller.API from a different, sibling, controller
我正在尝试从另一个同级控制器访问 videogular 的 controller.API。
我已经阅读并使用了 videogular 网站上的示例,并像这样使用 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!'
});
}
});
我在视频控制器中添加了一个 'listener':(使用在 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 中不起作用?
也许你正在丢失范围,尝试使用 .bind():
controller.onMyCustomEvent = function (event, data) {
console.log(data);
controller.API.pause();
}
$scope.$on('myCustomEvent', controller.onMyCustomEvent.bind(controller));
我正在尝试从另一个同级控制器访问 videogular 的 controller.API。
我已经阅读并使用了 videogular 网站上的示例,并像这样使用 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!'
});
}
});
我在视频控制器中添加了一个 'listener':(使用在 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 中不起作用?
也许你正在丢失范围,尝试使用 .bind():
controller.onMyCustomEvent = function (event, data) {
console.log(data);
controller.API.pause();
}
$scope.$on('myCustomEvent', controller.onMyCustomEvent.bind(controller));