Angular4-사용자 정의 toJSON ()이 새 객체에서만 호출되는 이유는 무엇입니까?

rmcsharry

이 코드가 있습니다. 직렬화는 단순히 template_items 속성의 이름을 template_items_attributes로 바꾸는 것입니다.

export class Template {
  constructor(
  ) {}

  public id: string
  public account_id: string
  public name: string
  public title: string
  public info: string
  public template_items: Array<TemplateItem>

  toJSON(): ITemplateSerialized {
    return {
      id: this.id,
      account_id: this.account_id,
      name: this.name,
      title: this.title,
      info: this.info,
      template_items_attributes: this.template_items
    }
  }
}


export interface ITemplateSerialized {
  id: string,
  account_id: string,
  name: string,
  title: string,
  info: string,
  template_items_attributes: Array<TemplateItem>
}

로컬에서 객체를 생성하는 것은 잘 작동하며 stringify는 toJSON () 메서드를 호출합니다.

그러나 일단 해당 객체를 API로 보내면 :

  private newTemplate(name: string): Template {
    let template = new Template();
    template.name = name;
    template.account_id = this._userService.user.account_id;
    // next 5 lines are for testing that toJSON() is called on new obj
    let item = new TemplateItem();
    item.content = "Test"
    template.template_items.push(item);
    let result = JSON.stringify(template);
    console.log('ready', result); // SHOWS the property changes
    return template;
  }

  postTemplate(name: string): Observable<any> {
    return this._authService.post('templates', JSON.stringify(this.newTemplate(name)))
      .map((response) => {
        return response.json();
      });
  }

저장되고 반환되지만 그 시점부터 문자열 화하고 다시 저장할 때 toJSON ()을 호출하지 않습니다.

  patchTemplate(template: Template): Observable<any> {
    console.log('patching', JSON.stringify(template)); // DOES NOT CHANGE!
    return this._authService.patch('templates' + `/${template.id}`, JSON.stringify(template))
      .map((response) => {
        return response.json();
      });
  }

toJSON ()이 새 객체에서만 작동하는 이유는 무엇입니까?

라자르 류 베노 비치

사실, 귀하의 질문은 Angular 또는 Typescript와 관련이 없으며 직렬화가 작동하는 방식 및 객체를 직렬화하는 이유 에 대한 일부 JavaScript 및 논리 일뿐 입니다.

그 객체를 API에 보내고 저장하고 반환합니다.

API에서 "객체"를 반환하면 JSON 직렬화 된 객체로 구문 분석하는 문자열을 반환합니다. 그런 다음 클래스의 인스턴스가 아닌 일반 JavaScript 객체 를 얻습니다 .

ObjectJavaScript의 프로토 타입에는 toJSON메서드 가 없습니다. 메서드가 있어도 Template클래스 내부에 작성한 메서드 가 아니므로 호출되지 않습니다.

이것을 복제하기 위해 서버 호출이 필요하지 않습니다.

const obj = JSON.parse(JSON.stringify(new Template()))
obj.toJSON // undefined

그리고 당신은 그 볼 obj의 인스턴스가 아닌 Template. 그것은 단순히 모든 필드를 원래 개체로 Template인스턴스 로 만든 개체 이지만 해당 클래스의 인스턴스가 아닙니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

즉시 호출되는 함수를 사용하여 새 개체를 만드는 이유는 무엇입니까?

분류에서Dev

yield Request를 호출 할 때 사용자 정의 콜백이 호출되지 않고 parse 메서드가 호출되는 이유는 무엇입니까?

분류에서Dev

Angular의 ng-show 호출이 Firebase를 사용하는 두 번째 클릭에서만 업데이트되는 이유는 무엇입니까?

분류에서Dev

이 대신 객체의 메서드에서 객체 이름이 사용되는 이유는 무엇입니까?

분류에서Dev

함수 속성은 객체 자체 (예 : Function.name)에 정의되지만 메서드는 Function.prototype에 정의되는 이유는 무엇입니까?

분류에서Dev

이 ref-qualified 사용자 정의 변환이 호출되는 이유는 무엇입니까?

분류에서Dev

객체의 RDF에서 문자열 대신 코드가 사용되는 이유는 무엇입니까?

분류에서Dev

React.js에서 새 문자열 값이 정의되지 않은 이유는 무엇입니까?

분류에서Dev

foreach가 자식 클래스의 새 메서드를 호출하지 않는 이유는 무엇입니까?

분류에서Dev

서비스 내의 함수에서 let 및 new를 사용하여 새 개체를 만들 때 이전 개체를 얻는 이유는 무엇입니까?

분류에서Dev

호출 된 객체에서 정적 블록이로드되지 않는 이유는 무엇입니까?

분류에서Dev

새로 생성 된 사용자가 사용자 이름의 기본 그룹에 할당되는 이유는 무엇입니까?

분류에서Dev

Tastypie에서 새 사용자를 만들 때 암호가 데이터베이스에 기록되지 않는 이유는 무엇입니까?

분류에서Dev

복사 생성자가 표현식의 반환 문에 의해 호출되는 이유는 무엇입니까?

분류에서Dev

js 객체를 만들 때 다른 정의 된 함수 내에서 정의 된 함수를 사용할 수없는 이유는 무엇입니까?

분류에서Dev

비 정적 메서드를 호출 할 때 구조체의 정적 생성자가 호출되는 이유는 무엇입니까?

분류에서Dev

사용자 정의 ImageView가 startAnimation (Animation)을 호출 할 때 JUnit 테스트 중에 getActivity ()가 차단되는 이유는 무엇입니까?

분류에서Dev

새 사용자를 만드는 동안 django 사용자 암호가 암호화되지 않는 이유는 무엇입니까?

분류에서Dev

클래스의 객체에 정수 값을 할당 할 때 매개 변수화 된 생성자가 호출되는 이유는 무엇입니까?

분류에서Dev

MongoDB의 $ push를 사용하여 배열에 새 객체를 추가 할 때 ObjectID가있는 _id가 추가되는 이유는 무엇입니까?

분류에서Dev

AppTheme이 사용자 정의 ActionBar 도구 모음에 적용되는 이유는 무엇입니까?

분류에서Dev

어셈블리 언어의 기호가 정의되기 전에 사용되는 이유는 무엇입니까?

분류에서Dev

사람들이 새 프로젝트에 angular 1.4를 사용하는 이유는 무엇입니까?

분류에서Dev

전달 된 객체를 메서드의 새 값에 할당 할 수없는 이유는 무엇입니까?

분류에서Dev

Java에서 사용자 정의 데이터 유형의 HashSet을 만드는 방법은 무엇입니까?

분류에서Dev

OOP를 사용할 때 문자열 옆에 "정의되지 않음"이있는 이유는 무엇입니까?

분류에서Dev

SELECT 문에서 사용자 지정 함수를 사용할 때 SQL 쿼리의 출력이 잘못 표시되는 이유는 무엇입니까?

분류에서Dev

새 사용자를 만들 때 홈 디렉터리가 생성되지 않는 이유는 무엇입니까?

분류에서Dev

Angular 공급자 : useFactory 메서드가 호출되지 않는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    즉시 호출되는 함수를 사용하여 새 개체를 만드는 이유는 무엇입니까?

  2. 2

    yield Request를 호출 할 때 사용자 정의 콜백이 호출되지 않고 parse 메서드가 호출되는 이유는 무엇입니까?

  3. 3

    Angular의 ng-show 호출이 Firebase를 사용하는 두 번째 클릭에서만 업데이트되는 이유는 무엇입니까?

  4. 4

    이 대신 객체의 메서드에서 객체 이름이 사용되는 이유는 무엇입니까?

  5. 5

    함수 속성은 객체 자체 (예 : Function.name)에 정의되지만 메서드는 Function.prototype에 정의되는 이유는 무엇입니까?

  6. 6

    이 ref-qualified 사용자 정의 변환이 호출되는 이유는 무엇입니까?

  7. 7

    객체의 RDF에서 문자열 대신 코드가 사용되는 이유는 무엇입니까?

  8. 8

    React.js에서 새 문자열 값이 정의되지 않은 이유는 무엇입니까?

  9. 9

    foreach가 자식 클래스의 새 메서드를 호출하지 않는 이유는 무엇입니까?

  10. 10

    서비스 내의 함수에서 let 및 new를 사용하여 새 개체를 만들 때 이전 개체를 얻는 이유는 무엇입니까?

  11. 11

    호출 된 객체에서 정적 블록이로드되지 않는 이유는 무엇입니까?

  12. 12

    새로 생성 된 사용자가 사용자 이름의 기본 그룹에 할당되는 이유는 무엇입니까?

  13. 13

    Tastypie에서 새 사용자를 만들 때 암호가 데이터베이스에 기록되지 않는 이유는 무엇입니까?

  14. 14

    복사 생성자가 표현식의 반환 문에 의해 호출되는 이유는 무엇입니까?

  15. 15

    js 객체를 만들 때 다른 정의 된 함수 내에서 정의 된 함수를 사용할 수없는 이유는 무엇입니까?

  16. 16

    비 정적 메서드를 호출 할 때 구조체의 정적 생성자가 호출되는 이유는 무엇입니까?

  17. 17

    사용자 정의 ImageView가 startAnimation (Animation)을 호출 할 때 JUnit 테스트 중에 getActivity ()가 차단되는 이유는 무엇입니까?

  18. 18

    새 사용자를 만드는 동안 django 사용자 암호가 암호화되지 않는 이유는 무엇입니까?

  19. 19

    클래스의 객체에 정수 값을 할당 할 때 매개 변수화 된 생성자가 호출되는 이유는 무엇입니까?

  20. 20

    MongoDB의 $ push를 사용하여 배열에 새 객체를 추가 할 때 ObjectID가있는 _id가 추가되는 이유는 무엇입니까?

  21. 21

    AppTheme이 사용자 정의 ActionBar 도구 모음에 적용되는 이유는 무엇입니까?

  22. 22

    어셈블리 언어의 기호가 정의되기 전에 사용되는 이유는 무엇입니까?

  23. 23

    사람들이 새 프로젝트에 angular 1.4를 사용하는 이유는 무엇입니까?

  24. 24

    전달 된 객체를 메서드의 새 값에 할당 할 수없는 이유는 무엇입니까?

  25. 25

    Java에서 사용자 정의 데이터 유형의 HashSet을 만드는 방법은 무엇입니까?

  26. 26

    OOP를 사용할 때 문자열 옆에 "정의되지 않음"이있는 이유는 무엇입니까?

  27. 27

    SELECT 문에서 사용자 지정 함수를 사용할 때 SQL 쿼리의 출력이 잘못 표시되는 이유는 무엇입니까?

  28. 28

    새 사용자를 만들 때 홈 디렉터리가 생성되지 않는 이유는 무엇입니까?

  29. 29

    Angular 공급자 : useFactory 메서드가 호출되지 않는 이유는 무엇입니까?

뜨겁다태그

보관