2016-06-08 8 views
5

Sto tentando di utilizzare angular2-in-memory-web-api nel mio progetto angular 2. Sto riscontrando problemi nella ricerca di documentazione che mostra come restituire oggetti dati diversi per richieste diverse con lo stesso nome di raccolta. Credo che la classe che uso per il mio SEED_DATA sia disattivata, ma non sono sicuro di come strutturarlo nel modo giusto per ottenere ciò che voglio.Differenti risultati dalle chiamate HTTP a angular2-in-memory-web-api con lo stesso nome della raccolta

Ecco il mio main.ts

import {provide} from "@angular/core"; 
import {bootstrap} from "@angular/platform-browser-dynamic"; 
import {HTTP_PROVIDERS, XHRBackend} from "@angular/http"; 
import {AppComponent} from "./app.component"; 
import {SEED_DATA, InMemoryBackendService} from "angular2-in-memory-web-api/in-memory-backend.service"; 
import {AppTestData} from "./AppTestData"; 

bootstrap(AppComponent, [ 
    HTTP_PROVIDERS, 
    provide(XHRBackend, {useClass: InMemoryBackendService}), 
    provide(SEED_DATA, {useClass: AppTestData}) 
]); 

Il mio file AppTestData.ts sarebbe simile a questa

export class AppTestData { 
    createDb() { 
     let studentData = { 
      name: "Student Name", 
      grade: "B" 
     }; 
     let otherStudentData = { 
      name: "Other Student Name", 
      grade: "A" 
     }; 


     let httpPaths = { 
      somepath: { 
       student: studentData, 
       anotherPath: { 
        student: otherStudentData 
       } 
      } 
     } 
     return httpPaths; 
    } 
} 

mio tentativo di httpPaths oggetto è spento. Ma l'idea sarebbe se io chiamassi una chiamata http a "qualcosa/studente" e tornassi a StudentData e chiamassi un'altra chiamata http a "qualcosa/un altro/studente" e tornassi ad altriStudentData.

Quanto segue sembra funzionare ma vorrei specificare il mio percorso completo nel caso in cui voglio postare "qualcosa/studente" e "qualcosa/un altro/studente" e ottenere risultati diversi.

let httpPaths = { 
      student: studentData 
    } 

risposta

4

credo vi siete persi le staffe nella istruzione return:

return {httpPaths}; 

Lo sviluppatore ha creato un esempio che può essere trovato here

+1

Se si nota che ha stanze, altoparlanti e sessioni come oggetti propri, quindi li inserisce {} prima di tornare. Ho fatto lo stesso, tranne che ho specificato le chiavi e le ho inserite nella loro variabile prima di tornare. Supponiamo che abbia un URL "api/room/save" e "api/speakers/save" che desidera chiamare e restituire un oggetto. Dovrebbe creare un oggetto di salvataggio e restituire solo un oggetto di salvataggio per entrambe le chiamate. Mi piacerebbe sapere come potrebbe restituire il suo oggetto altoparlante o il suo oggetto stanza su quelle chiamate di salvataggio anziché l'oggetto di salvataggio. – Blake

4

Se si vuole "finti" due differenti voi database deve seguire questa sintassi:

export class AppTestData { 
    createDb() { 
     let heroes = { 
      name: "Batman", 
      city: "Gotham" 
     }; 
     let countries = { 
      name: "America", 
      code: "GR" 
     }; 

     return {heroes,countries}; 
    } 
} 

Nel vostro servizio yo u può consumare con una promessa e l'URL per la richiesta HTTP sarebbe: private httpUrl = '../contacts/contacts';

La mia struttura dei file è qualcosa di simile:

repo 
-app 
    -shared 
    myservice.ts  // this consumes the data from the InMemory DB 
    data.service.db.ts // this implements the InMemoryDbService 
    ... 

Almeno questo è come ho risolto il problema. In effetti la documentazione ufficiale è scarsa finora.

+0

Grazie mille. Esattamente quello che stavo cercando. – hogan