Servicio AngularJS que pasa datos entre controladores

Cuando uso un servicio AngularJS para tratar de pasar datos entre dos controladores, mi segundo controlador siempre recibe información indefinida cuando intenta acceder a los datos del servicio. Supongo que esto se debe a que el primer servicio tiene $ window.location.href y creo que esto está borrando los datos en el servicio. ¿Hay alguna manera de que cambie la URL a una nueva ubicación y mantenga los datos persistidos en el servicio para el segundo controlador? Cuando ejecuto el código a continuación, la alerta en el segundo controlador siempre está indefinida.

app.js (Donde se define el servicio)

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 establece el valor en el servicio)

  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 tratando de leer el valor del servicio)

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

Define tu servicio 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; }; }); 

Mira la respuesta de Duncan aquí:

AngularJS: ¿cuáles son las principales diferencias en las diferentes formas de declarar un servicio en angular?