AngularJS服务在控制器之间传递数据

18 浏览
0 Comments

AngularJS服务在控制器之间传递数据

当使用AngularJS服务在两个控制器之间传递数据时,我的第二个控制器总是在尝试从服务中访问数据时收到undefined。我猜想这是因为第一个服务执行了$window.location.href,我认为这会清除服务中的数据?是否有办法让我将URL更改为新位置并保持数据在服务中持久存在,以供第二个控制器使用?当我运行下面的代码时,第二个控制器中的警告始终为undefined。

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());

}

});

0
0 Comments

AngularJS中的服务是用于在控制器之间传递数据的重要工具。在上述代码中,定义了一个名为userService的服务,它包含了一些用于获取和设置用户数据的方法。

该问题的出现原因可能是由于在第二个页面中使用了ng-app指令,这可能会清除掉服务的数据。解决方法可能是查看整个应用程序的代码,以确定是否存在其他原因导致数据丢失。另外,可以参考一个GitHub项目,该项目展示了如何在不同页面上使用userService。

通过查看其他人在Stack Overflow上提出的类似问题,可以获得更多解决方法。其中一个问题提到了在模块之间使用服务来传递值的方法。

总之,要解决AngularJS中控制器之间传递数据的问题,可以使用服务来保存和获取数据,并确保在使用ng-app指令时不会清除服务的数据。

0