저는 Angular 2로 프로젝트를 시작하고 Observables로 처음으로 다루고 있으며 매우 구체적인 경우에 대해 약간의 의문점이 있습니다.중첩 관측 가능 객체 다루기
나는 이렇게 가고있는 API 서비스가 있습니다
@Injectable()
export class UserAPI {
[...]
login(email: string, password: string): Observable<Response> {
let params = new URLSearchParams();
params.set('email', email);
params.set('password', password);
return this.$http.request(
new Request({
method: RequestMethod.Post,
url: this.baseUrl + '/login',
search: params
}))
.map((response: Response) => response.json());
}
[...]
}
나는 사용자 세션과 프로파일 데이터를 관리하고있어 이것을 호출하는 방법을 포함하는 사용자 서비스에 (그 세션이 활성화되어있는 동안) API :
@Injectable()
export class UserService {
[...]
constructor(private userAPI: UserAPI, private storage: StorageService) {
}
login(email: string, password: string) {
return this.userAPI.login(email, password).subscribe(
(res) => {
this.storage.store(Constants.storage.session, res.token);
},
(err) => {
this.storage.destroy(Constants.storage.session);
}
);
}
[...]
}
지금, 나는 또한 로그인 양식을 처리 할 구성 요소를 가지고 있고, 성공의 경우 응용 프로그램의 개인 영역에 사용자를 리디렉션하지만 실패 경우, 함께 발표 할 예정 오류 메시지 (우연히 발생할 경우 401 또는 기타 오류) :
@Component({
moduleId: module.id,
selector: "auth-login",
templateUrl: "auth.login.html"
})
export class LoginComponent {
constructor(private router: Router, private userService: UserService) {
}
[...]
login(): void {
this.form.loading = true;
this.form.error = -100; // arbitrary number
this.userService.login(this.form.email, this.form.password);
/*
.subscribe(
(res) => {
this.router.navigate(["/home", {}]);
},
(err) => {
this.form.error = err.status;
},
() => {
this.form.loading = false;
}
);
*/
}
[...]
}
userService.login()
함수 호출에 주석 처리 된 코드를 적어 두십시오. 그것들은 내가 호출의 성공/오류 중 하나에 대해 의도하는 지침이지만, 작동시키지 못합니다. 나는 일들을 분리하여 유지하고 싶다. 사용자 서비스는 세션 부분을 관리하고 구성 요소는 리다이렉션을 처리하거나 사용자에게 무엇이 잘못되었는지를 보여준다.
내가 뭘 잘못하고 있니? 여기에가는 길은 어때? 중첩 된 관찰 가능 항목? 구성 요소와 사용자 서비스간에 약속 사용? 다른 접근 방법은? 나는 지금 여기에서 찾고 있었지만 비슷한 사건을 발견하지 못했습니다.
을! 도움을 주셔서 대단히 감사합니다. 앵귤러 2의 밧줄과 그와 함께 새로운 모든 것들이 여전히 있습니다. – NunoM