2016-11-02 3 views
5

Ich möchte dem benutzerdefinierten Selektor, den ich in der eckigen 2-Komponenten-Implementierung erstellt habe, Attribute hinzufügen.Hinzufügen von Attributen zu Angular 2 Component Selector

@Component({ 
selector: 'my-node',  // add attributes to this selector 
template: `<div> <ng-content></ng-content> </div>`  
}) 

So dass, wenn ich <my-node> tue Der dom die Wähler mit diesen zusätzlichen Attributen erzeugt

<my-node flex="25" layout="row">

Ich will nicht zu hart Code dieser Attributen jedes Mal, wenn ich <my-node> tun. Ich möchte, dass diese Attribute Teil der Selectors-konstruierten Vorlage sind.

So etwas ist, was für Ich suche aber nicht alles wie es in der api

@Component({ 
selector: 'my-node',  
selectorAttributes: `layout="row"` // generates <my-node layout="row"> 
template: `<div> <ng-content></ng-content> </div>`  
}) 
+1

zu verwenden, was Sie erreichen wollen? Warum nicht auf das Wurzelelement der Vorlage setzen? – jonrsharpe

+1

Haben Sie @HostBinding versucht? – yurzui

Antwort

7

Verwenden host von @Component Metadateneigenschaft zu sehen.

@Component({ 
    selector: 'my-node',  // add attributes to this selector 
    template: `<div> <ng-content></ng-content> </div>`, 
    host: { // this is applied to 'my-node' in this case 
     "[class.some-class]": "classProperty", 
     "[attr.some-attr]": "attrProperty", 
    }, 
}) 

Hier ist ein Beispiel plunk. Siehe app/app.component.ts

+0

Hinzufügen von Host: '[attr] = "componentProp"' Fehler, können Sie Dokumente mit dieser "Host:" - Implementierung bitte verknüpfen? – ndesign11

+0

Sorry, das war falsch, aktualisierte meine Antwort –

+0

Ziemlich sicher, das ist, was ich brauche, aber immer noch Fehler bekommen. 'Kann nicht an 'attr' gebunden werden, da es keine bekannte Eigenschaft von 'my-node' ist. – ndesign11

5

Eine weitere Option ist die HostBinding dectorator

@HostBinding('attr.layout') 
layout = 'row'; 
+0

Dieser hat super für mich gearbeitet. Ich denke, es ist die beste Lösung, weil Sie es neben den anderen Klassenvariablen wie Eingaben, Ausgaben, Informationen zu privaten/öffentlichen Komponenten usw. platzieren können. Sie können auch vorhersagbar Werte festlegen und Typcodes abrufen, um Ihren Code zu analysieren, wenn Sie möchten Bewerten Sie eine Funktion als HostBinding-Wert. – vincecampanale

Verwandte Themen