2016-07-31 14 views
4

Ich bin ein wenig durch Typoskript Dekoratoren und wie sie erklärt werden kofusiert. Angeblich "dekorieren" sie eine Klasse, indem sie Metadaten damit assoziieren. Ich kann nicht wirklich das Konzept verstehen, wie diese Metadaten dann mit einer Klasseninstanz verknüpft werden. Nehmen Sie das Winkel 2 Beispiel.Typoskript-Dekoratoren vs Klasse Vererbung

@Component(
     { 
      selector:... 
     } 
    ) 


    export class foo { ... } 

Zur Zeit, als ich Winkel verstehen die Klasse foo instanziiert und assoziieren irgendwie die Instanz mit den Argumenten der Dekorateur, so dass sie Dienstleistungen erbringen können, Richtlinien und Vorlagen. All dies scheint auch über Klassenvererbung implementierbar zu sein. Wenn ich eine Component-Klasse habe und meine Component diese Klasse erweitern möchte, warum kann nicht angular dann diese Argumente liefern, wenn es in der Art booststraps, wie Reagieren mit Requisiten tut, und Dekoratoren in diesem Anwendungsszenario vollständig loswerden.

class Component { ... } //say this has members such as selector, services, directives, etc.. 

class Foo extends Component { ... } 

dann würden Sie es instanziiert, bei Bootstrap/Laufzeit mit diesem

new Foo(ElementName, Directives, Services, etc..) 

Mit reagieren technisch ist das, was unter der Haube ging. Sie haben die Komponente abgeleitet und ihre Methoden implementiert. Wenn Sie beim Instanziieren Informationen übergeben müssen, geben Sie das Props-Objekt ein.

bitte erleuchte mich.

Antwort

2

Soweit ich weiß, besteht der Hauptgrund darin, die statische Auswertung einfach zu machen. Bei der Vererbung müssten Sie TS (oder transpilierten JS) Code ausführen, um die Informationen zu erhalten.

Wenn Sie diese Metadaten statisch auswerten, können sie von Tools für die automatische Vervollständigung und alle Arten von Lint-Überprüfungen in der Vorlage sowie für Gebäudedesigner und andere Tools verwendet werden, die die Erstellung von Angular-Anwendungen erleichtern.

Auch der Offline-Vorlagencompiler verwendet diese Metadaten.