Я просто разбираюсь с Angular, но прохождение вокруг области становится лучше меня, когда я пытаюсь абстрагировать многоразовые компоненты в отдельные модули.Как вы называете функцию контроллера вашего модуля от полностью отдельного контроллера модуля?
Я использую модуль Angular Youtube, найденный здесь https://github.com/arnaudbreton/angular-youtube, но он очень неадекватен, поэтому я закрепил новые функциональные возможности, а именно поддержку событий API youtube API.
Во-первых, вот Уместно отрывок из модуля третьей стороной (в сокращенном виде):
angular.module('youtube', ['ng'])
.service('youtubePlayerApi', ['$window', '$rootScope', '$log', function ($window, $rootScope, $log) {
var player = $rootScope.$new(true);
player.playerContainer = null;
player.create = function (attrs) {
player.playerId = attrs.id;
player.videoId = attrs.videoId;
return new YT.Player(this.playerId, {
videoId: attrs.videoId,
events:{
onStateChange: function(event){
switch(event.data){
case YT.PlayerState.PLAYING:
attrs.onEvent()
break;
}
}
}
});
};
player.load = function(){
this.playerContainer = player.create();
}
return player;
}])
.directive('youtubePlayer', ['youtubePlayerApi', function (youtubePlayerApi) {
return {
restrict:'A',
scope: {
id:'@',
videoId:'@',
onEvent:'&'
},
link: function (scope, element, attrs) {
youtubePlayerApi.create(attrs);
}
};
}]);
Тогда есть мой собственный модуль:
var myapp = angular.module('myapp', ['youtube']);
myapp.controller('myAppCtrl', ['$scope', '$rootScope', '$location', '$log', 'youtubePlayerApi', function($scope, $rootScope, $location, $log, youtubePlayerApi) {
$scope.showVideo = function(){
$scope.youtubePlayer = youtubePlayerApi.load();
}
$scope.myEventHandler = function(){
alert('finished!')
}
}]);
и связанный с ним шаблон:
<div ng-app="myapp" id="ng-app">
<div ng-controller="myAppCtrl">
<div youtube-player id="ytplayer" video-id="0BWD5I6YrIo" on-event="myEventHandler()"></div>
</div>
</div>
Как вы увидите, я изо всех сил пытаюсь подключить функцию myeventhandler()
от myAppCtrl
с модулем youtubeapi
.
Я также не уверен, что я правильно настраиваю переменные области Изолировать, поскольку я только когда-либо видел это, когда значения области передаются в шаблон, а не как функция ссылок, подобная этой.
Любые указатели на то, где я ошибаюсь?
Я еще не вытащил этот код в тестовое приложение и играл с ним, но для меня это выглядит так, как будто вы все делаете правильно - код для материала YouTube выглядит подозрительно для меня. Я заметил, что код GitHub не соответствует коду здесь; вы можете попробовать обновить код углового-youtube. –