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

时间:2013-09-18 18:59:52

标签: angularjs

我想在控制器之间传递一个带有服务的变量。这是传递变量的服务(在这种情况下是歌曲ID):

'use strict';

angular.module('PortalApp')
  .service('ActionbarService', ['$window', function ActionbarService(window) {
    var song;
    return {
        getSong: function () {
            return song;
        },
        setSong: function(value) {
            song = value;
        }
    };
  }]);

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

$scope.actionbarSetSong = function(song_id) {
  ActionbarService.setSong(song_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>

1 个答案:

答案 0 :(得分:3)

嗯..服务返回new ActionbarService。您可能希望使用factory,或将您的getter / setter更改为this.get&amp; this.set

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