Javascript 如何在AngularJS中的不同控制器之间进行交互
简单的例子。我有一个球员。它分为两个部分:歌曲部分(当前播放)和播放列表部分 我有两个控制器(实际上我会有两个控制器,这就是为什么我要问):SongCtrl和PlalistCtrlJavascript 如何在AngularJS中的不同控制器之间进行交互,javascript,angularjs,Javascript,Angularjs,简单的例子。我有一个球员。它分为两个部分:歌曲部分(当前播放)和播放列表部分 我有两个控制器(实际上我会有两个控制器,这就是为什么我要问):SongCtrl和PlalistCtrl 但它们之间如何互动呢?例如:当我开始播放歌曲时,我还需要在播放列表中突出显示它。您可以让控制器使用指令或服务进行交互 关于你的例子: hen I start playing song I need also highlight it inside of playlist. 在这种特殊情况下,应该避免直接从控制器更改
但它们之间如何互动呢?例如:当我开始播放歌曲时,我还需要在播放列表中突出显示它。您可以让控制器使用
指令或服务进行交互
关于你的例子:
hen I start playing song I need also highlight it inside of playlist.
在这种特殊情况下,应该避免直接从控制器更改DOM。例如,您可以使用一个指令来突出显示播放列表中正在播放的歌曲,最好的方法是使用服务。假设您有一个服务负责播放歌曲(过于简化):
然后,您可以在播放列表中使用此选项:
.controller( 'PlaylistCtrl', function ( $scope, musicPlayer ) {
$scope.isCurrentSong = function( idx ) {
if ( $scope.currentSong == idx ) return true;
};
$scope.play = function( idx ) {
musicPlayer.setCurrentSong( idx );
};
$scope.$watch( function () {
return musicPlayer.getCurrentSong()
}, function ( id ) {
$scope.currentSong = id;
});
});
这样您的视图就可以访问它:
{{song.name}
您可以在其他控制器中以类似方式访问它,以获取当前播放的歌曲。如果没有更多的细节,就很难更加具体,但这是最佳实践方法。你的意思是什么?我不会改变控制器的一些东西。这就是我的意思,使用ngclass
而不是从控制器添加javascript。此外,您可能需要重新考虑使用单个控制器,这将简化工作。你仍然可以有专门的服务(一个用于歌曲,另一个用于播放列表),我也喜欢这种方法。我会考虑的。也有人分享如何做“角度的方式”分享:)谢谢你的回应。非常感谢!它看起来像我的播放器:D我不知道$watch语法,有两个函数作为参数,但我会发现!
.controller( 'PlaylistCtrl', function ( $scope, musicPlayer ) {
$scope.isCurrentSong = function( idx ) {
if ( $scope.currentSong == idx ) return true;
};
$scope.play = function( idx ) {
musicPlayer.setCurrentSong( idx );
};
$scope.$watch( function () {
return musicPlayer.getCurrentSong()
}, function ( id ) {
$scope.currentSong = id;
});
});