Lorsque j'utilise un service AngularJS pour essayer de transmettre des données entre deux contrôleurs, mon deuxième contrôleur reçoit toujours indéfini lorsqu'il essaie d'accéder aux données du service. Je suppose que c'est parce que le premier service fait un $ window.location.href et je pense que cela efface les données du service? Existe-t-il un moyen pour moi de modifier l'URL vers un nouvel emplacement et de conserver les données persistantes dans le service pour le deuxième contrôleur? Lorsque j'exécute le code ci-dessous, l'alerte dans le deuxième contrôleur n'est toujours pas définie.
app.js (où le service est défini)
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: (Contrôleur 1 qui définit la valeur en service)
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 (deuxième contrôleur essayant de lire la valeur du service)
app.controller('AppController', function($scope, $http, userService) {
$scope.init = function() {
alert("In init userId: " userService.getEmail());
}
});
Définissez votre service comme ceci
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;
};
});
Découvrez la réponse de Duncan ici: