Podczas korzystania z usługi AngularJS w celu próby przekazywania danych między dwoma kontrolerami, mój drugi kontroler zawsze otrzymuje wartość nieokreśloną podczas próby uzyskania dostępu do danych z usługi. Zgaduję, że to dlatego, że pierwsza usługa robi $ window.location.href i myślę, że to wyczyszczenie danych w usłudze? Czy istnieje sposób na zmianę adresu URL do nowej lokalizacji i utrzymanie danych w usłudze drugiego kontrolera? Kiedy uruchomię poniższy kod, alert w drugim kontrolerze jest zawsze niezdefiniowany.Usługa AngularJS Przekazywanie danych między kontrolerami
app.js (gdzie są one zdefiniowane)
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: (Controller 1, który określa wartość w eksploatacji)
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 (drugi kontroler próbujący odczytać wartość z usługi)
app.controller('AppController', function($scope, $http, userService) {
$scope.init = function() {
alert("In init userId: " userService.getEmail());
}
});
Dzięki @ Josh-Petitt. Nadal jestem niezdefiniowany, ale teraz myślę, że to dlatego, że na drugiej stronie I przejścia, która jest pełnym dokumentem HTML, mam dyrektywę ng-app w elemencie HTML. Zgaduję, że to właśnie oczyszcza dane usługi? Czy to brzmi poprawnie? – AquaLunger
Może, trudno powiedzieć bez patrzenia na całą aplikację. FWIW, oto projekt AngularJS, nad którym pracowałem, aby się uczyć. Możesz przeglądać katalog app/user i zobaczyć, jak go zaimplementowałem. Mogę korzystać z userService na różnych stronach. https://github.com/jpmec/done –
@ user1093077 Witam, Czy udało Ci się obejść swoje rozwiązanie? Mam ten sam problem na stronie: http://stackoverflow.com/questions/20118335/angular-dependency-injection-passing-values-between-modules-using-service –