Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在AngularJS中,如何在具有服务的控制器之间传递变量?_Angularjs - Fatal编程技术网

在AngularJS中,如何在具有服务的控制器之间传递变量?

在AngularJS中,如何在具有服务的控制器之间传递变量?,angularjs,Angularjs,我想在控制器和服务之间传递一个变量。以下是传递变量的服务(在本例中为歌曲id): 以下是我设置歌曲的控制器的相关部分: $scope.actionbarSetSong = function(song_id) { ActionbarService.setSong(song_id); } 这是我从中获取歌曲id的控制器: 'use strict'; angular.module('PortalApp') .controller('ActionbarCtrl', function ($sc

我想在控制器和服务之间传递一个变量。以下是传递变量的服务(在本例中为歌曲id):

以下是我设置歌曲的控制器的相关部分:

$scope.actionbarSetSong = function(song_id) {
  ActionbarService.setSong(song_id);
}
这是我从中获取歌曲id的控制器:

'use strict';

angular.module('PortalApp')
  .controller('ActionbarCtrl', function ($scope, MediaService, ActionbarService, $location, $routeParams, AudioPlayerAPI) {
    $scope.song_id = ActionbarService.getSong();
    $scope.openPlaylistModal = function (song_id) {

      $("#addToPlaylist").modal('show');
    }
  });
它是在服务中设置的,因为当我在视图中执行getSong时,它工作了(我忘了在哪里),但当我尝试在第二个控制器中设置它时,它不工作。以下是我观点的相关部分供参考:

    <div class="cell action-bar" ng-click="actionbarSetSong(song.id);" ng-repeat="song in media.data">
Some Stuff
    </div>

一些东西

Mmm。。服务返回
新ActionbarService
。您可能想使用
工厂
,或者将getter/setter更改为
this.get
this.set


另外,避免污染
$rootScope
;每当您想要在控制器之间共享数据时,请使用。

您不能只在$rootScope中设置值吗?那么您就不需要该服务了。请确保两个控制器位于同一页面上。您的
播放器在哪里
data ng click=“player.setSong(song.id);”
对不起,这是另一个名称类似的东西。老实说,我忘了玩家是从哪里来的。两个控制器都在同一个“页面”,但我不确定它们在同一个范围内。我认为一个是另一个的孩子,或者两个都是另一个范围的孩子。有时候用Angular很难判断。是的,有另一个堆栈答案(至少有一个),但这似乎不是一个好的编码实践。我将研究如何使用工厂。对不起,我的意思是使用$rootScope似乎不是一个好的编码实践。角度服务看起来很好,尽管很奇怪很神奇,就像所有角度服务一样。给它一些时间,它会变得更好:)
    <div class="cell action-bar" ng-click="actionbarSetSong(song.id);" ng-repeat="song in media.data">
Some Stuff
    </div>