2016-05-24 7 views
2

Ich bin dabei, über 400 Modelle für die Verwendung mit js-Daten in meiner angular2 (angular-cli) -App zu haben.Wie importiere ich mehr als 400 Module und iteriere sie in meinem angular-cli-Projekt?

Struktur meines Projektes ist dies:

- src/ 
    - app/ 
    - services/ 
    - pipes/ 
    - ui/ 
    - data/ 
     - store.ts 
     - models/ 
     - model1.ts 
     - model2.ts 
     - ... 
     - model400.ts 

In dem Laden, ich importieren müssen, und fügen Sie die Zuordnung in den Laden. Die Modelldateien werden Mapper eigentlich nur configs für js-Daten 3.

zur Zeit, sie in etwa so aussehen:

// src/app/data/models/model1.ts 
export default { 
    schema: { 
    name: 'model1', 
    properties: { 
     id: { type: 'integer' } 
    } 
    }, 
    relations: {} 
} 

und meinem Speicher sieht derzeit wie folgt aus:

// src/app/data/store.ts 
import { 
    DataStore, 
    Mapper, 
    Record, 
    Schema, 
    utils 
} from 'js-data' 
import {HttpAdapter} from 'js-data-http' 

declare var require: any 

export const adapter = new HttpAdapter({ 
    // Our API sits behind the /api path 
    basePath: '/api' 
}); 

export const store = new DataStore({}); 
store.registerAdapter('http', adapter, { default: true }); 

import { model1Config} from './models/model1'; 
import { model2Config } from './models/model2'; 
import { model3Config } from './models/model3'; 
// at this point, I give up, cause this is more tedious 
// than cutting grass with a finger nail clipper 
store.defineMapper('model1', model1Config); 
store.defineMapper('model2', model2Config); 
store.defineMapper('model3', model3Config); 

Wenn es gibt sowieso eine iteration über jede datei im models ordner, das wäre toll.

angular-cli soll schließlich alle ts/js zu einer einzigen js-Datei kompilieren, so dass ich mir keine Gedanken über irgendetwas machen muss, das auf der Client-Seite nicht laufen könnte. (also, ich habe Brokkoli, und was auch immer andere Build-Tools sind damit gebündelt, ich weiß nur nicht, ob einige von ihnen für diese Situation nützlich wäre)

Antwort

2

Sie könnten eine Indexdatei, die Sie verwenden kann für Ihre Importe verwenden. zum Beispiel in der models eine Index-Datei-Ordner, die nur jedes Modell für Sie wie folgt exportiert:

// ...../models/index.ts 

export * from './models/model1'; 
export * from './models/model2'; 

dann in anderen Dateien können Sie sie wie folgt importieren:

import {model1Config, model2Config, model3Config } from "path/to/models/index"; 
... 

Sie haben das definieren, exportiert irgendwo. Wenn Sie eine Datei verwenden, die als "Export-Sammlung" fungiert, sparen Sie mindestens eine Menge Codezeilen (und viel Zeit, wenn Sie eine gute IDE verwenden). Das Einrichten des Index mit Ihren x-hunderten von Modellen ist immer noch mühsam. Vielleicht könnte ein kleines Skript mit Schluck helfen.

+0

Ich importiere nur die Dateien nur einmal, um den Speicher zu konfigurieren. Also, ich brauche diese Stufe der Importfähigkeit nicht. Das ist aber gut zu wissen! – NullVoxPopuli

+0

Mh, mir fällt nichts ein, was dir helfen könnte, die 'store.defineMapper'-Aufrufe loszuwerden. Außer die Datei oder dieses Snippet irgendwie zu erzeugen. – lexith

+0

Ja, jemand im js-data slack-Kanal schlug vor, ein t4-Skript im Visual Studio zu schreiben (da das Backend .net ist) - es würde zumindest helfen, zu beginnen, aber mehr als 800 Zeilen des Importierens der configs und setting mapper auf dem Laden ist einfach inakzeptabel, imo. – NullVoxPopuli

Verwandte Themen