2016-11-17 6 views
0

Ich habe mir folgendes angesehen: https://github.com/mgechev/angular-seed um das Angular Module System in seiner einfachsten Form zu verstehen.Angular2 Modulsystem mit TS

In diesem Seed-Projekt gibt es eine SharedModule, die sowohl index.ts als auch shared.module.ts hat. In shared.module.ts exportiert es den eckigen Weg - mit Direktiven, Exporten, Providern usw. In index.ts reexportiert es diese. In app.module.ts importiert es SharedModule.forRoot(), die perfekt ist - das registriert die NameListService, um für die gesamte Anwendung verfügbar zu sein. Wenn jedoch die NameListService verwendet werden soll, muss sie importiert werden, und dies erfolgt über import { NameListService } from '../shared/index'; wie in home.component.ts dargestellt, die übrigens Teil der home.module.ts ist, die auch die SharedModule importiert.

Laut mir ist das total falsch.

Warum sollte ich es so importieren - das bricht Modularität - was ist, wenn ich ein Modul verwende, das ich nicht geschrieben habe und daher nicht weiß, wo genau nach einer Datei zu suchen ist?

Warum würde ich mich dann damit beschäftigen, Dinge in shared.module.ts zu erstellen und zu registrieren, wenn ich sie dann über die shared/index.ts verwenden muss statt nur die shared/index.ts?

Mit freundlichen Grüßen

Antwort

1

Ich glaube, diese Frage auf Angular Webseite beantworten über war: https://angular.io/docs/ts/latest/cookbook/ngmodule-faq.html#!#q-ng-vs-js-modules

Ich würde empfehlen, https://angular.io/docs/ts/latest/guide/ngmodule.html für eine tiefer gehende Führung Lesen auf ngModules

aktualisieren

Versuchen Sie, es in Bezug auf die zwei verschiedenen Compiler zu denken: den eckigen Compiler und den Typescript-Compiler.

Die Tatsache, dass Sie den UserService nach Pfad referenzieren, ermöglicht dem Typoskript-Compiler, ihn zu finden. Wenn der UserService nicht gefunden werden konnte, wird der Code nicht kompiliert. Es bietet Ihnen auch eine Intellisense- und Typprüfung. Dem Angular Compiler ist das egal.

Durch Hinzufügen des UserService zu ngModule kann der Angular-Compiler eine Instanz davon erstellen und sie Ihren Komponenten, Diensten usw. zur Verfügung stellen. Wenn Sie dies nicht tun, erhalten Sie einen Fehler wie: "Kein Provider für UserService gefunden "

+0

Ja. Ich weiß das, aber es fühlt sich merkwürdig (unnötig) an, beide Systeme nebeneinander zu verwenden, ohne dass sie miteinander kommunizieren. Mein Problem mit dem obigen Beispiel ist, dass ich angeben muss, wo der UserService über Pfad ist, obwohl es Teil eines gültigen Angular-Moduls ist. – mp3por

+0

Ich habe meine Antwort aktualisiert –

Verwandte Themen