2016-06-28 11 views
7

Ich begann gerade mit Angular 2 und fragte mich, warum einige Eigenschaften wie selector und template in Komponenten Dekoratoren und nicht in Komponenten Klassen gelegt werden.Warum verwendet Angular 2 Dekorateure?

Worauf kommt es bei der Verwendung dieser Dekoratoren in Angular 2 an?

Antwort

2
  • Um es einfach für Werkzeuge alle Arten von Unterstützung in Vorlagen wie zur Verfügung zu stellen:

    Prüfung
  • Auto-Vervollständigung
  • Designer grafische GUI
    • Fehler Um Code von Dekoratoren zu erzeugen, der erlaubt:

      • einige Dinge mehr deklarativ zu definieren oder
      • anderen Code erzeugen auf einige je nach Konfiguration (wie die kommenden offline Template Compiler tut)

    -Code würde ausgeführt werden müssen verwenden Ergebnisausdrücke können ausgegeben werden. Dekorierer können einfach statisch ausgewertet werden, ohne den TypeScript-Code auszuführen (außer vielleicht eine einfache und begrenzte Teilmenge).

  • 0

    Im Allgemeinen ermöglichen Dekoratoren die Ausführung von Funktionen. Zum Beispiel führt @Component die aus Angular2 importierte Funktion Component aus. Unter der Haube definieren solche Decorators einige Metadaten über die Klasse. Auf diese Weise können Sie die Klasse so konfigurieren, dass sie als Komponente markiert wird. Angular2 kann dann Selektoren in Templates mit einer solchen Klasse verknüpfen.

    Dieser Artikel könnte Sie weitere Hinweise geben, was unter der Haube passiert:

    Sie können die Dekorateure bemerken in Typoskript auf verschiedenen Ebenen (Klasse anwenden können, Klasse Eigenschaft, Methode Parameter).

    +1

    "Im Allgemeinen können Dekoratoren Funktionen ausführen". Das ist nicht sehr hilfreich. Programmiersprachen lassen Sie "Funktionen ausführen" ... – spinkus

    4

    Zusätzlich zu den plattformspezifischen Antworten, die bereits dort sind, würde ich gerne aus einer allgemeineren Sicht einsteigen. Diese Frage, von meiner Meinung nach, ist irgendwie mit der Entscheidung im Zusammenhang des Decorator-Muster der Vererbung (zB @Component vs extends Component) Auswahl

    Einige der Vorteile der Verwendung von Dekorateure sind:

    1. Trennung von Bedenken:

    Informationen innerhalb Dekoratoren ist deklarativ, sie definieren das Verhalten einer Klasse, höchstwahrscheinlich wird sich im Laufe der Zeit nicht ändern und werden vom Framework verwendet. Klasseneigenschaften und Felder sind klassenspezifische Daten, werden immer verarbeitet und häufig aktualisiert und haben nur innerhalb der Klasse Bedeutung. Diese zwei Arten von Daten sollten nicht miteinander gemischt werden.

    2.Unterstützung mehrerer Modifikationen

    Viele Sprachen verhindern Mehrfachvererbung aufgrund Diamond problem. Andererseits kann eine Klasse mehrere Dekoratoren für verschiedene Zwecke haben (z. B. @Component und die veraltete @RouteConfig).

    +1

    Ich kaufe nicht wirklich das zweite Argument. Wo in einem Angular2 erleichtert die Verwendung von Dekoratoren ein mehrfaches Vererbungsproblem? Ja, Dekorateure eignen sich gut, um Klassen mit Metadaten zu markieren. Aber sie haben em wie Klassen-/Typdeklarationen verwendet. Komponentenklassen/-typen sind immer mit \ @Component ausgestattet. Module immer mit \ @NgModule, und es macht keinen Sinn, \ @Component auf etwas anderes als eine logische Komponentenklasse usw. zu setzen. Meiner Meinung nach ist das eine zweifelhafte Designentscheidung. Nicht zu sagen, dass es keine Vorteile gibt - genau wie alles andere. – spinkus