Angular2 HTTP GET - 응답을 전체 개체로 캐스트
이 간단한 구성요소를 가지고 있습니다.
import {Component} from 'angular2/core';
import {RouterLink, RouteParams} from 'angular2/router';
import {Http, Response, Headers} from 'angular2/http';
import {User} from '../../models/user';
import 'rxjs/add/operator/map';
@Component({
template: `
<h1>{{user.name}} {{user.surname}}</h1>
`,
directives: [RouterLink],
})
export class UserComponent {
user: User;
constructor(private routeParams: RouteParams,
public http: Http) {
this.user = new User();
this.http.get('http://localhost:3000/user/' + this.routeParams.get('id'))
.map((res: Response) => res.json())
.subscribe((user: User) => this.user = user);
console.log(this.user);
}
}
왜 그럴까요?subscribe
대답을 충분히 하지 않는User
물건.로그를 기록할 때user
내 콘솔이 말하는 변수User {_id: undefined, name: undefined, surname: undefined, email: undefined}
하지만 그럼에도 불구하고 구속력이 있습니다..name
그리고..surname
작동하고 있는 것으로 표시됩니다.
여기서 무슨 일이 일어날까요?사용자는 실제로 어디에 저장됩니까?
모범 사례는 다음을 사용하여 GET 응답의 데이터를 소비하는 것입니다.
Observable<Model>
(Angular documentation https://angular.io/guide/http) 을 참조하십시오. 그래서...
수입품
import {HttpClient} from "@angular/common/http";
생성자 매개 변수 목록에서
private http: HttpClient
서비스 방식
getUser(): Observable<User> {return this.http.get<User>({url}, {options});}
당신은 더 이상 아무것도 할 필요가 없습니다.저는 이 접근법이 가장 우호적이라고 생각합니다.
다음 사이트에서 솔루션을 찾을 수 있습니다. https://stackoverflow.com/a/29759472/2854890
이제 내 방법은 다음과 같습니다.
constructor(private routeParams: RouteParams,
public http: Http) {
this.user = new User();
this.http.get('http://localhost:3000/user/' + this.routeParams.get('id'))
.map((res: Response) => res.json())
.subscribe((json: Object) => {
this.user = new User().fromJSON(json);
});
}
기능을 향상시켰습니다.Serializable
결국 물건을 돌려줌으로써, 나는 다음과 같은 것을 생략할 수 있습니다.
var u = new User();
u.fromJSON(...);
그리고 그냥 써요.
new User().fromJSON(json);
Serializable
계급의
export class Serializable {
fromJSON(json) {
for (var propName in json)
this[propName] = json[propName];
return this;
}
}
TypeScript에서는 지원되지 않습니다.
자세한 내용은 JSON 개체를 유형 스크립트 클래스에 캐스팅하는 방법을 참조하십시오.
언급URL : https://stackoverflow.com/questions/36014161/angular2-http-get-cast-response-into-full-object
'programing' 카테고리의 다른 글
MySQL 여러 테이블에서 선택, 일치하지 않는 모든 열 및 행 유지 (0) | 2023.07.15 |
---|---|
새 배열이 DOM에서 렌더링되지 않습니다. (0) | 2023.07.15 |
https만 사용하여 타워를 설치하시겠습니까? (0) | 2023.07.15 |
대화형 편집 중에 내부 vim에서 Git rebase를 중단하는 방법 (0) | 2023.07.15 |
크기의 내부 메커니즘(단위: C? (0) | 2023.07.15 |