angularjs - AngularJS服务在 Controller 之间传递数据

标签 angularjs angularjs-service

当使用AngularJS服务尝试在两个 Controller 之间传递数据时,当尝试从该服务访问数据时,我的第二个 Controller 始终会收到未定义的信息。我猜这是因为第一个服务执行$ window.location.href,并且我想这正在清除服务中的数据吗?我是否可以将URL更改为新位置,并将数据保留在第二个 Controller 的服务中?当我运行下面的代码时,第二个 Controller 中的警报始终未定义。

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(试图从服务读取值的第二个 Controller )
app.controller('AppController', function($scope, $http, userService) {

$scope.init = function() {      
    alert("In init userId: " userService.getEmail());
}

});

最佳答案

这样定义您的服务

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

在此处查看邓肯的答案:

AngularJS - what are the major differences in the different ways to declare a service in angular?

关于angularjs - AngularJS服务在 Controller 之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17952620/

相关文章:

javascript - Angular JS 从 1.1.0 升级到 1.1.1 后失败

angularjs - AngularJS 服务提供的静态数据

Angularjs - 如何在服务中设置模块值?

angularjs - 将通用 Controller 功能存储在服务中,以便将它们置于隔离范围内

javascript - $watch 不处理来自其他 Controller 的变量?

javascript - 为什么 Angular 没有注意到这个变量的值已经改变了?

angularjs - Cordova Angularjs 请求 GPS

css - Bootstrap 和 topcoat 样式重叠,移动滑动菜单背景

Angularjs ui 路由器。如何重定向到登录页面

angularjs - 了解 AngularJS 中的 $watch 吗?