Serviço AngularJS passando dados entre controladores

Ao usar um serviço AngularJS para tentar passar dados entre dois controladores, meu segundo controlador sempre fica indefinido ao tentar acessar dados do serviço. Eu estou supondo que isso é porque o primeiro serviço faz um $ window.location.href e eu estou pensando que isso está limpando os dados no serviço? Existe uma maneira de alterar o URL para um novo local e manter os dados persistentes no serviço do segundo controlador? Quando executo o código abaixo, o alerta no segundo controlador é sempre indefinido.

app.js (onde o serviço é definido)

var app = angular.module('SetTrackerApp', ['$strap.directives', 'ngCookies']); app.config(function ($routeProvider) { $routeProvider .when('/app', {templateUrl: 'partials/addset.html', controller:'SetController'}) .when('/profile', {templateUrl: 'partials/profile.html', controller:'ProfileController'}) .otherwise({templateUrl: '/partials/addset.html', controller:'SetController'}); }); app.factory('userService', function() { var userData = [ {yearSetCount: 0} ]; return { user:function() { return userData; }, setEmail: function(email) { userData.email = email; }, getEmail: function() { return userData.email; }, setSetCount: function(setCount) { userData.yearSetCount = setCount; }, getSetCount: function() { return userData.yearSetCount; } }; }); 

logincontroller.js: (Controlador 1 que define valor em serviço)

  app.controller('LoginController', function ($scope, $http, $window, userService) { $scope.login = function() { $http({ method : 'POST', url : '/login', data : $scope.user }).success(function (data) { userService.setEmail("foobar"); $window.location.href = '/app' }).error(function(data) { $scope.login.error = true; $scope.error = data; }); } }); 

appcontroller.js (Segundo controlador tentando ler o valor do serviço)

 app.controller('AppController', function($scope, $http, userService) { $scope.init = function() { alert("In init userId: " userService.getEmail()); } }); 

Defina seu serviço como este

 app.service('userService', function() { this.userData = {yearSetCount: 0}; this.user = function() { return this.userData; }; this.setEmail = function(email) { this.userData.email = email; }; this.getEmail = function() { return this.userData.email; }; this.setSetCount = function(setCount) { this.userData.yearSetCount = setCount; }; this.getSetCount = function() { return this.userData.yearSetCount; }; }); 

Confira a resposta de Duncan aqui:

AngularJS – quais são as principais diferenças nas diferentes formas de declarar um serviço em angular?