W czasie budowy wartość @Input
nie jest jeszcze ustawiona. W jaki sposób Angular2 może ustawić wartość @Input
przed utworzeniem komponentu?
Musisz poczekać na zainicjowanie komponentu; co oznacza, że wszystkie wartości @Input
zostały ustawione. Możesz to zrobić, implementując interfejs OnInit
.
Tak, aby naprawić swój przykład:
<log-user [user]="user"></log-user>
(Uwaga: user
musi być określony przedmiot, poza tym przykładzie nieokreślonej nadal będzie zalogowany Możesz dodać *ngIf="user"
do znacznika log-user
html, aby zapewnić. tag nie zostanie wygenerowana przed user
faktycznie istnieje)
zrobić:.
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);
}
}
Można również po prostu utworzyć metodę ngOnInit
na swoim komponencie bez implementowania interfejsu, ale poprzez zaimportowanie interfejsu OnInit
użytkownik upewni się, że kompilator Typescript nie popełnił pomyłki.
W Angular docs about OnInit stany:
implementować ten interfejs do wykonywania logiki zwyczaj po inicjalizacji właściwości danych związana Twojego dyrektywy zostały zainicjowane.
ngOnInit jest wywoływana zaraz po tym, jak właściwości danych związanych z dyrektywą zostały sprawdzone po raz pierwszy i zanim któreś z jego dzieci zostały sprawdzone. . Jest wywoływany tylko jeden raz, gdy zostanie utworzona dyrektywa w postaci .
dziękuję za poświęcony czas, ale ja już próbowałem tego i nadal rejestruje jako niezdefiniowany? –
Ponadto, zamiast przekazywać obiekt, próbowałem przekazać tylko ciąg: ' '. To działa i jest rejestrowane wewnątrz komponentu. Czy coś jest nie tak, przechodząc w obiekcie tak, jak próbowałem? @Lodewijk –
Nie ma w tym nic złego. Musi istnieć przed utworzeniem kontrolera. –