나는 angularjs 서비스와 공장에 관한 여러 글을 읽었다. 나는 서비스가 싱글 톤이고 팩토리가 객체의 인스턴스를 반환한다는 것을 알고있다. 그러나 나는 아직도 그것들을 사용하는 방법을 정말로 모른다. 내 응용 프로그램은 간단한 소셜 네트워크입니다. 앱을 사용하는 사람이 로그인해야만 다른 회원을보고 메시지를 보낼 수 있습니다.여전히 angularjs 서비스와 공장에 대해 혼동을 느낀다.
내 이상적인 디자인은 다음과 같습니다
- 내 서비스의 임의의 구성원을 대표하는 회원 개체를 만듭니다. 'list'또는 'get'연산이 데이터를 반환 할 때마다이 멤버에 래핑되어 유틸리티 메서드를 호출 할 수 있습니다. 나는 이걸 위해 공장을 쓸거야.
- 사용자가 앱에 로그인하면 해당 사용자를 나타내는 멤버를 만들고 (나중에 인증 된 요청을 위해 사용자 ID와 인증 토큰 포함) 이것은 다른 범위에서 사용할 수 있어야하므로 $ rootScope에 첨부하거나 인증 된 사용자에 맞게 조정 된 Member의 인스턴스를 반환하는 MemberService가 될 수 있습니다.
내가 만든 다음
angular.module('myapp.models', [])
.factory('Member', ['$log', 'DataService', '$http', 'Restangular',
function($log, DataService, $http, Restangular) {
return {
user_id: null,
first_name: null,
last_name: null,
authenticate: function(username, password, loginSuccessHandler, loginErrorHandler) {
$log.debug("inside Member.authenticate");
var authSuccessHandler = function(data, status, headers, config) {
$http.defaults.headers.common.Authorization = 'Basic ' + btoa(data._id + ':' + data.token);
var token = btoa(data._id + ':' + data.token);
user_id = data._id; // attach this to the rootScope? Needs to be
// globally accessible (or even this whole object)
Restangular.setDefaultHeaders({'Authorization': 'Basic ' + token});
$log.debug("Auth successful, token stored " + token);
loginSuccessHandler();
};
DataService.authenticate(username, password, authSuccessHandler, authErrorHandler);
},
...
어떻게이를 인스턴스화하고 다른 범위에서 사용할 수 있도록 (예를 들어, 다른 범위에서 그래서는 사용자의 ID 로그인 알고있는 것) 할 수 있습니까?
또한 구성원 목록을 구문 분석 할 때이 개체의 인스턴스를 만들 수 있습니까? 예 : 객체가있는 경우 {first_name: "John", last_name: "Smith"}
어떻게 이러한 속성을 가진이 팩토리에서 Member 객체를 얻을 수 있습니까?
어쨌든 그것을 사용하려고하는 이유보다는 뭔가의 원리를 이해하기 너무 어려운 경우 내가 항상 말을? –