[英]AngularJS: Communication between directives
我正在写一个创建mp3 /音频播放器的指令。 问题是你可以在一个页面中拥有许多音频播放器。 我想做的是当一个人在玩,你开始另一个,那个正在玩的人暂停。 如何通过角度指令实现这一目标?
提前致谢!
像这样的东西:
angular.module('MyPlayer' [])
.factory('playerState', function() {
var players = [];
return {
registerPlayer: function(player) {
players.add(player);
},
unregisterPlayer: function(player) {
var i = players.indexOf(player);
(i>-1) && players.splice(i,1);
},
stopAllPlayers: function() {
for(var i=0;i<players.length;i++) {
players[i].stop();
}
}
}
})
.directive('player', function(playerState) {
return {
...
link: function(scope, elem, attr) {
var player = {
stop: function() {
/* logic to stop playing */
},
play = function(song) {
playerState.stopAllPlayers();
/* logic to start playing */
}
}
playerState.registerPlayer(player);
scope.$on("$destroy", function() {
playerState.unregister(player);
});
scope.play = player.play;
scope.stop = player.stop;
...
}
}
})
您的指令如何设置? 请提供一些代码。
这取决于你的指令的范围,我将假设一个子范围。 要在指令之间进行通信,当用户点击启动播放器时,我会调用$ scope。$ parent。$ broadcast() - 或$ rootScope。$ broadcast()如果指令在不同的控制器中或使用隔离的作用域,但是你需要将$ rootScope注入你的指令 - 将事件发送到所有子范围。 我的指令是使用$ on观看此活动,任何正在玩的玩家都会停止。 在此广播之后,点击的玩家将开始。
您还可以执行$ rootScope。$ broadcast事件,如playerStarted
。 所有指令都可以订阅此事件,并且可以通过停止自己来响应此事件。 你需要做的一件事就是传递关于正在开始的玩家的数据,以便新玩家不会停止,因为它也会订阅这样的事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.