2015-11-10 31 views
11

This esempio mostra come utilizzare l'annotazione @Input() sui componenti figlio. La mia domanda è come la usi sul componente root? Per esempio, se si modifica il codice sul link qui sopra:Parametri di input angolare 2 sulla direttiva root

@Component({ 
selector: 'app', 
template: ` 
    <bank-account bank-name="RBC" account-id="4747"></bank-account> 
`, 
directives: [BankAccount] 
}) 
class App { 
    @Input() something: string; 
} 

bootstrap(App); 

E in html:

<app something="Test"></app> 

L'esempio di cui sopra non aggiorna mai qualcosa proprietà su App componente.

+1

Ho voglia di fare anche questo. Aggiunto un bug qualche tempo fa https://github.com/angular/angular/issues/4921 – TGH

risposta

16

This Tobias Bosch's comment è rispondere alla tua domanda:

Il motivo per cui questo non funziona è che il vostro index.html in cui si posiziona il <app something="Test"></app> non è una componente angolare. Per questo motivo, Angular non compilerà questo elemento. E Angular non legge i valori degli attributi durante il runtime, solo durante la compilazione, altrimenti si otterrebbe un impatto sulle prestazioni.

Quindi, in questo momento non è possibile utilizzare i parametri di input sull'elemento principale.

+0

come passare la matrice di oggetti da express/jade a un componente angular2? Volevo legare in quel modo e non funziona. – user2705463

+0

Se ha il decoratore @Component, come mai non è un componente angolare? – d512

17

penso che si potrebbe ancora utilizzare:

class App { 
    constructor(elm: ElementRef) { 
     this.something = elm.nativeElement.getAttribute('something'); 
    } 
} 
+0

Funziona perfettamente. ElementRef può essere importato da angular2 // core. –

+0

Grazie mille. :-) Funziona perfettamente con valori statici! – Patrick

+1

[ElementRef] (https://angular.io/docs/ts/latest/api/core/index/ElementRef-class.html) è contrassegnato con l'etichetta RISCHIO DI SICUREZZA, quindi fai attenzione ad utilizzarlo. – eagor

Problemi correlati