In fase di costruzione il valore @Input
non è ancora impostato. In che modo Angular2 ha impostato il valore @Input
prima che il componente fosse effettivamente costruito?
È necessario attendere l'inizializzazione del componente; ovvero tutti i valori @Input
sono stati impostati. È possibile farlo implementando l'interfaccia OnInit
.
Quindi, per risolvere il tuo esempio:
<log-user [user]="user"></log-user>
(Nota: user
deve essere un oggetto definito, tuttavia in questo esempio indefinita sarebbe ancora essere registrato È possibile aggiungere *ngIf="user"
al tag log-user
html per garantire. il tag non viene reso prima user
esiste realmente)
Do:.
import {Component, Input, OnInit} from 'angular2/core';
@Component({
selector: 'log-user',
template: `This works: {{user}}`
})
export class LogUserComponent implements OnInit {
@Input() user:any;
ngOnInit() {
// this now gets logged as 'user'
console.log(this.user);
}
}
È anche possibile creare il metodo ngOnInit
sul componente senza implementare l'interfaccia, ma importando l'interfaccia OnInit
si garantisce che il compilatore Typescript non commetta errori di battitura.
I Angular docs about OnInit stati:
implementare questa interfaccia per eseguire logica di inizializzazione personalizzato dopo proprietà con associazione a dati vostra di direttiva sono stati inizializzati.
ngOnInit viene chiamato a destra dopo che le proprietà di data associate ai dati della direttiva sono state controllate per la prima volta e prima che uno dei suoi figli sia stato controllato. Viene richiamato una sola volta quando la direttiva è istanziata.
fonte
2016-01-02 16:58:39
Grazie per il vostro tempo, ma ho già provato, e registra ancora indefinita? –
Inoltre, invece di passare un oggetto, ho provato a passare solo una stringa: " '. Funziona e viene registrato all'interno del componente. Quindi c'è qualcosa di sbagliato passando in un oggetto nel modo in cui ho provato? @Lodewijk –
No, non c'è niente di sbagliato in questo. Deve solo esistere prima che il controller venga istanziato. –