AngularJS サービスを使用して 2 つのコントローラー間でデータの受け渡しを試みると、サービスからデータにアクセスしようとすると、2 番目のコントローラーは常に undefined を受け取ります。これは、最初のサービスが $window.location.href を実行し、これがサービス内のデータを消去しているためだと思いますか? URL を新しい場所に変更し、データを 2 番目のコントローラーのサービスに保持する方法はありますか? 2 番目のコントローラーでアラートの下のコードを実行すると、常に未定義になります。
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: (サービスに値を設定する Controller 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 (サービスから値を読み取ろうとする 2 番目のコントローラー)
app.controller('AppController', function($scope, $http, userService) {
$scope.init = function() {
alert("In init userId: " userService.getEmail());
}
});