2016-09-14 1 views
4

This Section of the Angular2 Tutorial에는 배열에 새 항목을 추가하는 기능이 있습니다. 추가하면 ID가 자동으로 증가하지만 어떤 프로세스가 그 ID를 처리하는지 알 수 없습니다.Angular2 튜토리얼 :이 섹션의 ID 변수가 자동으로 증가하는 이유는 무엇입니까?

나는 Arrays.push()가 배열의 길이를 반환한다는 것을 안다. Hero 클래스의 id 변수에 자동으로 삽입되는 길이인가? create 방법에서 추가

add(name: string): void { 
    name = name.trim(); 
    if (!name) { return; } 
    this.heroService.create(name) 
    .then(hero => { 
    this.heroes.push(hero); 
    this.selectedHero = null; 
    }); 
} 

답변

7

튜토리얼은 angular 2 in-memory-web-api 라이브러리를 사용하고 있습니다. 그것은 영웅의 URL에 만들어지고있는 게시물을 처리하고 있습니다. 핸들러는 라인 (328)에이 파일에서 볼 수있다 :

InMemoryBackendService.prototype.genId = function (collection) { 
    // assumes numeric ids 
    var maxId = 0; 
    collection.reduce(function (prev, item) { 
     maxId = Math.max(maxId, typeof item.id === 'number' ? item.id : maxId); 
    }, null); 
    return maxId + 1; 
}; 
0

에게 거기에 heroes.component.ts

create(name: string): Promise<Hero> { 
return this.http 
    .post(this.heroesUrl, JSON.stringify({name: name}), {headers: this.headers}) 
    .toPromise() 
    .then(res => res.json().data) 
    .catch(this.handleError); 
} 

: hero.services.ts에서

영웅 생성하는 코드 블록이있다 서비스의 웹 API가 호출되어 영웅의 이름을 게시하면 idname 필드의 전체 영웅 개체가 반환됩니다.

그래서 나는 그 웹 API에서 커튼 뒤에있는 "증가"와 "절약"을 추측합니다.

2

기본 기능은 InMemoryDbService입니다.

당신은 app/in-memory-dataservice.ts

import { InMemoryDbService } from 'angular2-in-memory-web-api

서비스에 대한 각 소스의 모의/참조를 찾을 수는 여기에서 찾을 수 있습니다 : in-memory-backend.service.t (line 326)

+0

감사 : ID가 구현이 라인에 257가에 GenID의 함수에 대한 호출을 통해 생성되는 핸들러 내부

https://github.com/angular/in-memory-web-api/blob/master/in-memory-backend.service.js

, 나는이 물건의 기능이 무엇인지를 정확하게 알아내는 데 어려움을 겪고있다. – Decius

+0

@Decius 문제가 없습니다. 내 대답을 타이핑하는 게 더 나을 것 같아. ;) – Nix

+0

허용 된 답변을 바꾸어서 죄송합니다. 나는 다른 대답의 코드 블록이 다른 웹 페이지의 링크보다 낫다고 느꼈다. – Decius

관련 문제