2016-09-14 6 views
4

This Section of the Angular2 Tutorialには、新しい項目を配列に追加する機能があります。追加されると、IDは自動的にインクリメントされますが、どのプロセスがそれを行っているのか把握できません。Angular2チュー​​トリアル:このセクションのID変数はどのように自動インクリメントされますか?

私はArrays.push()が配列の長さを返すことは知っていますが、その長さはHeroクラスのid変数に自動的に挿入されますか? hero.services.tsで

ヒーローを作成するためにこのコードブロックがある: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); 
} 

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に作られている投稿を処理しています。そのハンドラ内idが実装ライン257上にあるられたGenID関数の呼び出しを介して生成される

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

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

を追加でありますWeb 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

ありがとうございましたハンドラは、328行にこのファイルで見ることができます私は、これらのものの機能性が何であるかを正確に見つけることが困難でした。 – Decius

+0

@Decius問題ありません。私の答えをタイプアップして、より良い仕事をしたはずです。 ;) – Nix

+0

受け入れられた答えを入れ替えることについて申し訳ありません。私は他の答えのコードブロックが別のWebページへのリンクよりも良かったと感じています:) – Decius

関連する問題