在AngularJS中获取和设置工厂值/对象

时间:2015-02-10 18:48:13

标签: angularjs

部分内容包括这是否可行的问题,但我正在尝试创建一个名为currentUser的工厂值,该值将从userService中保留一次。我试图找出如何使这种互动发生。

如果我的工厂如下:

app.factory('currentUser', function() {

});

app.factory('userService', function() {
  return {
    users: [{
      name: "John",
      password: "12",
      email: "test@example.com",
      phone: "238-491-2138"
    }, {
      name: "Austin",
      password: "potaoes",
      email: "example@gmail.com",
      phone: "138-490-1251"
    }]

  };
});

我有一个执行以下操作的控制器,有没有办法放currentuser = userService.users[i];。或者,如果这是一种可怕的方式,我如何设置一种方法来跟踪“当前用户”?

  $scope.login = function() {
    for (var i = 0; i < userService.users.length; i++) {
      if (userService.users[i].email.toLowerCase() === $scope.credentials.email.toLowerCase()) {
        if (userService.users[i].password === $scope.credentials.password) {
          $scope.messageLogin = "Success!";
          $timeout(function() {
            $timeout(function() {
              $location.path("/account");
            }, 500)
            $scope.loggedIn = true;
            $scope.messageLogin = "Redirecting...";

            //  currentUser == userService.users[i];

          }, 500)
        } else {
          $scope.messageLogin = "Incorrect login details";
        }
        return;
      }
    }
    $scope.messageLogin = "Username does not exist";
  };

不确定这是否可行,因为工厂似乎总是有return而且从来没有获取/设置方案。因此,如果这对工厂来说很糟糕,我应该怎么做呢?

2 个答案:

答案 0 :(得分:0)

Services/Factories in AngularJS are singletons,因此您应该构建应用程序,期望服务始终解析为相同的值。

话虽如此,您的服务只是一个JavaScript对象,其字段/属性是可变的。我没有看到在您的“userService”中添加一个名为“current”的字段时出现任何问题,该字段旨在包含对当前用户的引用。

答案 1 :(得分:0)

你有几个选择。您可以将其作为用户服务本身的一部分:

app.factory('userService', function() {
  var currentUser;

  return {
    getCurrentUser: function() {
      return currentUser;
    },
    setCurrentUser: function(user) {
      currentUser = user;
    },
    users: [{
      name: "John",
      password: "12",
      email: "test@example.com",
      phone: "238-491-2138"
    }, {
      name: "Austin",
      password: "potaoes",
      email: "example@gmail.com",
      phone: "138-490-1251"
    }]

  };
});

或者您可以将其存储在单独的对象中:

app.factory('currentUser', function() {
  var currentUser;

  return {
    getCurrentUser: function() {
      return currentUser;
    },
    setCurrentUser: function(user) {
      currentUser = user;
    }
  };
});