2015-02-10 36 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」的字段有任何問題,該字段旨在包含對當前用戶的引用。