2016-10-04 3 views
0

Ich habe dies:Richtlinie Attribut binden kann nicht an eine Host-Komponente Eigenschaft

<my-cmp input> 
    hello 
</my-cmp> 

my-cmp hat @Input() disabled und input ist eine weitere Richtlinie wie:

@Directive({ 
    selector: '[input]', 
    host:{ 
    '[disabled]': 'true' 
    } 
}) 

Warum ist es beschweren, dass disabled ist nicht als Eingabe in my-cmp deklariert?

Grundsätzlich möchte ich eine Direktive, die einige Bindungen auf das Hostelement anwendet.

Here ist die plunkr

Antwort

0

Ihr Problem ist, dass Ihre Richtlinie nur für eine Art von Komponente funktioniert, und es ist nicht, wie Richtlinien verwendet werden sollen.

Wenn Sie input Anweisung zu einem Div hinzufügen, wird es nicht funktionieren, da disabled keine bekannte native Eigenschaft ist. Gleiches gilt für Ihre Komponente. Ich denke, weil die Direktiven vor den Komponenten geladen sind.

Um dies zu beheben, sollten Sie richtig Ihre disabled-Attribut verwenden:

<my-cmp [disabled]="true"> 
    hello 
</my-cmp> 

N. B: Sie können auch einen Tippfehler auf MyComponent gemacht, @Directive@Component sein sollte und ein template Attribut haben.

0

Sie müssen nur eckige Klammern vom Host entfernen:

@Directive({ 
    selector: '[input]', 
    host:{ 
     'disabled': 'true' 
    } 
}) 

Plunker

+0

dann wird es nicht richtig anwenden? – lqbweb

+0

Up, sorry, Sie müssen eckige Klammern von Host anstelle von Selektor entfernen, ich habe meine Antwort geändert. Jetzt haben Sie = "true" als Attribut ausgewählt. –

+0

auch wenn es glücklich ist, ist es immer noch nicht gebunden denke ich: https://plnrkr.co/edit/8AbfBIlSGv3Bkz9bIg0w?p=preview es druckt, undefined. – lqbweb

Verwandte Themen