2015-12-16 5 views
5

Das größte Problem, das ich mit Angular 1 habe, ist, wie schwierig es ist, eine Direktive (objektorientiert) zu erweitern.Sind Angular 2-Anweisungen nun "erweiterbar"?

Zum Beispiel ist es fast unmöglich, die input[number] Direktive auf meinem benutzerdefinierten Widget wieder zu verwenden, und ich musste den gesamten Validierungs- und Typumwandlungscode neu implementieren.

Angular 2-Komponenten sind als Klassen implementiert, so dass sie leicht erweitert werden können. Sie haben jedoch auch die @Component Annotation mit sehr spezifischen Selektoren usw., die es mir unklar macht, ob diese vollständig außer Kraft gesetzt werden können.

Sind die Angular 2-Direktiven tatsächlich erweiterbar?

Edit:

Okay "dehnbar" nicht über Klassen erstreckt werden. Es kann eine neue Direktive erstellen, die aus mehreren vorhandenen Direktiven besteht. Meine Frage mit diesem Ansatz ist, was ist der Mechanismus, um die Kinderrichtlinien anzuwenden?

(Die @Component Klassen sind nicht traditionelle OO Klassen mit Methoden, die man die Kinder auslösen kann. Es ist nur ein Behälter von Feldern und Rückrufen, die von ganz angetrieben werden, was auch immer hinter der Anmerkung ist.)

Antwort

5

Anmerkungen sind nicht geerbt, so, wenn Sie:

@Directive({ 
    selector:'foo', 
    inputs:['bar'] 
}) 
export class Foo {} 


//no annotation 
export class FooBar extends Foo {} //not a directive 


@Directive({ 
    selector:'foobaz' 
}) 
export class FooBaz extends Foo {} //is a directive, but has no inputs 

FooBar nicht als Richtlinie überhaupt erkannt werden, und FooBaz werden, aber es wird nicht die bar Eingang (oder jegliche andere). Also, Wenn Vererbung ist wirklich Was macht den meisten Sinn für Ihren Anwendungsfall, wäre die Art und Weise zu nähern, um Eingänge usw. in der Kindklasse Anmerkungen zu erklären und sie als Konstruktor Argumente an die Elternklasse übergeben, wo Sie können allgemeine Funktionen kapseln.

Das heißt, ich denke nicht, Erweiterbarkeit impliziert zwangsläufig Vererbung, und nach meiner Erfahrung ist das alte Sprichwort "Gunst Zusammensetzung über Vererbung" doppelt wahr, wenn DI beteiligt ist.

Jemand, der viel schlauer ist als ich, sagte kürzlich: "Vererbung wird deine Kinder im Schlaf ermorden", und ich neige dazu, mich an diesen Standpunkt zu halten, wenn ich nicht sicher bin, dass es das richtige Werkzeug für meinen Anwendungsfall ist.

+1

Hallo, ich stimme Ihnen voll und ganz zu "favor Zusammensetzung über Vererbung", aber es ist nicht so einfach mit eckigen Komponenten. Siehe meine Bearbeitung oben. –