2015-02-10 32 views
0

其中的一部分内容包括这是否可行的问题,但我试图创建一个名为currentUser的工厂值,该工厂值将从userService中进行一次使用。我正试图弄清楚如何使这种交互发生。在AngularJS中获取并设置一个工厂值/对象

如果我的工厂如下:

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

}); 

app.factory('userService', function() { 
    return { 
    users: [{ 
     name: "John", 
     password: "12", 
     email: "[email protected]", 
     phone: "238-491-2138" 
    }, { 
     name: "Austin", 
     password: "potaoes", 
     email: "[email protected]", 
     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,从来没有一个GET /套方案的事实。所以如果这对于Factory来说是一个不好的用途,我应该怎么做呢?

+0

为什么过度使用$超时?是否严格地在消息出现时引入一些延迟并发生重定向?看起来像这是试图解决一个问题,可以更好地解决承诺。 – 2015-02-10 18:55:06

回答

0

您有几个选项。你可以把它的用户服务本身的一部分:

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

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

    }; 
}); 

也可以将其存储在一个单独的对象:

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

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

Services/Factories in AngularJS are singletons,所以你应该建立你的应用程序,期望服务总是会解决相同的价值。

这就是说,你的服务只是一个JavaScript对象,它的字段/属性是可变的。我没有看到向“userService”中添加一个名为“current”的字段有任何问题,该字段旨在包含对当前用户的引用。