Когато използвам услуга AngularJS за опит за предаване на данни между два контролера, вторият ми контролер винаги получава undefined, когато се опитва да получи достъп до данни от услугата. Предполагам, че това е така, защото първата услуга прави $window.location.href и мисля, че това изчиства данните в услугата? Има ли начин да променя URL адреса на ново местоположение и да запазя данните в услугата за втория контролер? Когато стартирам кода под предупреждението във втория контролер винаги е недефиниран.
app.js (където услугата е дефинирана)
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: (Контролер 1, който задава стойност в услугата)
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 (Вторият контролер се опитва да прочете стойност от услугата)
app.controller('AppController', function($scope, $http, userService) {
$scope.init = function() {
alert("In init userId: " userService.getEmail());
}
});