2015-10-15 4 views
8

Vielleicht ist das eine Art von zwei Fragen in einem. Ich weiß, dass Sie explizit Anweisungen erklären müssen, die in einer Komponente für Angular 2 verwendet werden. Wird dies an untergeordnete Komponenten der Komponente weitergegeben, und wenn nicht, kann es gemacht werden? Zweitens: Werden Variablen, die für die Komponente deklariert sind, an untergeordnete Elemente weitergegeben oder müssen sie explizit an die Komponente übergeben werden?Direktive/Scope Vererbung

+1

Sie planen zu implementieren, was Sie erwähnen. [Siehe diese Ausgabe] (https://github.com/angular/angular/issues/2844). Es wird jedoch immer wieder zurückgedrängt, so dass Sie warten müssen. –

+0

Ich denke, dies ist eine harte Nuss zu knacken, weil die Idee der Modularität diktiert, dass eine Komponente/Modul keine Abhängigkeiten, die implizit sind. Wenn Sie Ihre Kind-Komponente woanders verschieben, würde es brechen. Dies wird normalerweise durch Vererbung oder Abhängigkeitsinjektion gelöst, wodurch eine starke Bindung zwischen dem Kind und der Elternkomponente geschaffen wird, wodurch wiederum Ihre Kindkomponente selbstständig bewegt werden kann. – jornare

+0

Ich denke, das macht Sinn in der gleichen Weise wie funktionale Programmierung dann ... bedauerlicherweise bedeutet es, dass ich etwas zu tun habe;) – djvs

Antwort

2

Ab beta14 müssen Sie alle verwendeten Direktiven in @Components directives Array explizit auflisten. Für den zweiten Teil der Frage werden Variablen, die für eine Komponente deklariert sind (z. B. this.name), nicht an untergeordnete Komponenten weitergegeben. Um dies zu erreichen, müssen Sie sie explizit in der Komponentenvorlage mit Attributen wie <child [item]="parentItem"></child> übergeben und die untergeordnete Komponente muss die Eigenschaft @Input item enthalten.

EDIT: Zur Klärung Kommentar nehmen ... Es ist möglich, Richtlinien global zu registrieren, aber nur in bootstrap Funktion. Richtlinien, die für das übergeordnete Element deklariert sind, werden von der untergeordneten Komponente NICHT geerbt.

bootstrap(App, [ 
    PLATFORM_DIRECTIVES, 
    provide(PLATFORM_DIRECTIVES, {useValue: [SomeDirective, SomeComponent], multi:true}) 
]); 
+0

Sie können mit 'provide (PLATFORM_DIRECTIVES, {useValue: [SomeDirective, SomeComponent], multi: true}) ', gleiches gilt für Pipes' bootstrap (App, [provide (PLATFORM_PIPES, {useValue: RainbowizePipe, multi: true})]; ' –

+0

Vielen Dank für die Klarstellung – tomastrajan