Javascript 如何在AngularJS中的不同控制器之间进行交互

Javascript 如何在AngularJS中的不同控制器之间进行交互,javascript,angularjs,Javascript,Angularjs,简单的例子。我有一个球员。它分为两个部分:歌曲部分(当前播放)和播放列表部分 我有两个控制器(实际上我会有两个控制器,这就是为什么我要问):SongCtrl和PlalistCtrl 但它们之间如何互动呢?例如:当我开始播放歌曲时,我还需要在播放列表中突出显示它。您可以让控制器使用指令或服务进行交互 关于你的例子: hen I start playing song I need also highlight it inside of playlist. 在这种特殊情况下,应该避免直接从控制器更改

简单的例子。我有一个球员。它分为两个部分:歌曲部分(当前播放)和播放列表部分

我有两个控制器(实际上我会有两个控制器,这就是为什么我要问):SongCtrl和PlalistCtrl


但它们之间如何互动呢?例如:当我开始播放歌曲时,我还需要在播放列表中突出显示它。

您可以让控制器使用
指令或
服务进行交互

关于你的例子:

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;
      }); 
    });