angularjs - datos - pasar parametros entre controladores angular 2
Servicio AngularJS pasando datos entre controladores (1)
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;
};
});
Echa un vistazo a la respuesta de Duncan aquí:
Cuando utilizo un servicio AngularJS para intentar pasar datos entre dos controladores, mi segundo controlador siempre recibe un mensaje indefinido cuando intento acceder a los datos del servicio. Supongo que esto se debe a que el primer servicio hace $ window.location.href y creo que esto está borrando los datos en el servicio. ¿Hay alguna manera de cambiar la URL a una nueva ubicación y mantener los datos en el servicio para el segundo controlador? Cuando ejecuto el código debajo, 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 que intenta leer el valor del servicio)
app.controller(''AppController'', function($scope, $http, userService) {
$scope.init = function() {
alert("In init userId: " userService.getEmail());
}
});