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