2016-11-02 15 views
5

Chciałbym dodać atrybuty do niestandardowego selektora, który utworzę w 2-składnikowej implementacji kątowej.Dodaj atrybuty do Angular 2 Selektor składników

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

Tak, że kiedy robię <my-node> DOM generuje selektor z tych dodatkowych atrybutów

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

nie chcą ciężko kodem tych atrybutów za każdym razem robię <my-node>. Chcę, aby te atrybuty były częścią konstruktora selektorów.

Coś jak to, co Im szuka ale nie widząc niczego podobnego w API

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

Co chcesz przez to osiągnąć? Dlaczego nie umieścić ich w głównym elemencie szablonu? – jonrsharpe

+1

Czy próbowałeś @HostBinding? – yurzui

Odpowiedz

7

Korzystanie host z @Component właściwości metadanych. To jest przykład plunk. Zobacz app/app.component.ts

+0

Dodawanie hosta: "[attr] =" componentProp "" błędy, czy możesz linkować do dokumentów z tą implementacją "host:"? – ndesign11

+0

Przepraszam, to było niepoprawne, zaktualizowałem moją odpowiedź –

+0

Jestem pewien, że to jest to, czego potrzebuję, ale wciąż dostaję błędy. 'Nie można powiązać z 'attr', ponieważ nie jest to znana właściwość 'my-node'. – ndesign11

5

Inną opcją jest użycie dectorator HostBinding

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

Ten działał dla mnie świetnie. Myślę, że jest to najlepsze rozwiązanie, ponieważ możesz umieścić je obok innych zmiennych klasowych, takich jak dane wejściowe, dane wyjściowe, informacje o składnikach prywatnych/publicznych itp. Pozwala to również na przewidywalne ustawianie wartości i uzyskanie funkcji Typescript do analizy kodu, jeśli chcesz oceń funkcję jako wartość HostBinding. – vincecampanale