2017-11-09 1 views
0

아무런 기능이 없습니다 :각도 4 HTTP 응답 내가 함수와 클래스가

export class Order { 
    status: string; 

    public isNew(): boolean { 
     return status == 'NEW'; 
    } 
} 

나는 새로운 주문 나는 함수를 호출 할 수 있습니다 만들 때 :

let order = new Order(); 
order.isNew(); 

를하지만, 경우에하는 것은에서 주문을 검색을

this.http.get('url') 
.map(response => response.json() as Order) 
.subscribe(order => order.isNew()); 

내가 잘못 뭐하는 거지 : 내 백엔드와이 메소드를 호출, 나는 오류가, order.isNew is not a function 얻을?

답변

2

일부 간단한 JSON이 마술처럼 Order 객체가된다는 논리는 샘플 코드에 없습니다. 당신은 그것을 변환해야합니다. 'as'연산자는 그렇게하지 않는다. 이것은 TypeScript 레벨에서의 타입 캐스트 일 뿐이다. 실제 변환이 일어나지 않습니다. 당신이 당신의 목표를 달성 JSON 소요 주문에 생성자를 작성하고 그냥 주문 응답을 캐스팅 .map(response => new Order(response.json()))

2

통화 할 경우
, 당신은 주문의 객체를 생성하지 않습니다. 그래서 그 오류가 발생합니다.

이 때문에 데이터베이스에이

export class Order { 
    status: string; 

    constructor(obj?: any) { 
     this.status = obj && obj.status || ''; 
    } 
    public isNew(): boolean { 
     return status == 'NEW'; 
    } 
} 


this.http.get('url') 
.map(response => response.json()) 
.subscribe(order => { 
    const new_order = new Order(order); 
}); 
1

처럼 클래스를 확인, 당신은 데이터가 아닌 기능을 저장합니다. 즉, 함수가 저장되지 않았으므로 응답을 받으면 함수에 저장되지 않습니다.

또한 주문에 대한 응답 만 전송 중이므로 새 응답을 만들지 않습니다. 이 작업은 주로 IDE에서 자동 완료하는 것입니다.

this.http.get('url') 
.map(response => new Order(response.json().status)) 
.subscribe(order => order.isNew()); 
:

export class Order { 
    constructor(public status?: string) { this.status = status; } 
    public isNew(): boolean { return status == 'NEW'; } 
}} 

그런 다음 당신은 당신의 응답에서 개체를 만들어야합니다

당신은 당신이 생성자를 만들 필요가 작동하려면