@Init의 Angular 2에서 입력 속성이 정의되지 않았습니다.
구성 요소의 정보를 얻는 중@Input
에 가치가 있는.constructor
또는ngOnInit
하지만 그것은 다음과 같이 오고 있습니다.undefined
시종일관
나는 영웅 플런커를 업데이트했습니다.console.log
문제를 표시합니다(각도가 높음).http://plnkr.co/edit/dseNM7OTFi1VNG2Z4Oj5?p=preview
export class HeroDetailComponent implements OnInit {
constructor(){
console.log('hero', this.hero)
}
public hero: Hero;
ngOnInit() {
console.log('hero', this.hero)
}
}
내가 여기서 뭘 잘못하고 있는 거지?
당신이 정의되지 않는 이유는ngOnInit
구성 요소가 초기화된 시점에서 실제로 전달되지 않았기 때문입니다.Hero
물건
<my-hero-detail [hero]="selectedHero"></my-hero-detail>
이 시점에서selectedHero
당신의 가치가 없습니다.AppComponent
그리고 목록의 클릭 이벤트가 호출하기 전까지는 그렇지 않습니다.onSelect
방법
편집: 제가 실제로 해결책을 제공하지 않았다는 것을 알게 되어 죄송합니다.추가할 경우ngIf
로.my-hero-detail
<my-hero-detail *ngIf="selectedHero" [hero]="selectedHero"></my-hero-detail>
이로 인해 시스템 초기화가 지연될 경우my-hero-detail
콘솔 출력이 표시됩니다.그러나 선택한 영웅이 변경되면 다시 출력되지 않습니다.
이는 영웅이 비동기식으로 로드되므로 보기가 처음 렌더링될 때 선택한 영웅이 정의되지 않기 때문입니다.그러나 선택한 후에는 정의된 값으로 세부 정보 보기에 영웅이 전달됩니다.
기본적으로 원래 값(정의되지 않음)을 기반으로 한 onInit 호출이 표시됩니다.
각 선택 후 유사한 작업을 실행하려면 다음과 같이 수정할 수 있습니다.
export class HeroDetailComponent implements AfterViewChecked {
constructor(){
console.log('hero', this.hero)
}
public hero: Hero;
ngAfterViewChecked() {
console.log('hero', this.hero)
}
}
입력 속성 값이 정의되지 않은 경우에도 동일한 동작이 발생했습니다.ngOnInit
진술서*ngIf="selectedHero"
html 코드에 만족하지 못했습니다.게다가, 사용하는 것.AfterViewChecked
@THG의 대답은 저에게 좋은 해결책이 아니었습니다. 왜냐하면 그것은 주기적으로 전화를 하고 또한 경고를 일으키기 때문입니다.ExpressionChangedAfterItHasBeenCheckedError
변수를 변경하고 싶을 때(해결 방법을 사용하고 싶지 않았습니다)setTimeout
) 이것이 이 문제에 대한 저의 해결책입니다.
export class MyComponent implements OnChanges {
@Input() myVariable: any;
ngOnChanges(changes: SimpleChanges) {
if (changes['myVariable']) {
let variableChange = changes['myVariable'];
//do something with variableChange.currentValue
}
}
}
나중에 누군가에게 도움이 되었으면 좋겠습니다.
ngOninit 방법 사용에서,
ngOnInit() {
if(this.hero)
console.log('hero', this.hero);
}
@저의 경우 바라바스 솔루션이 작동하지 않았습니다.나는 이것을 사용하게 됩니다.
export class HeroDetailComponent implements OnChanges {
@Input() hero: any;
ngOnChanges(changes: SimpleChanges){
if(changes.hero && changes.hero.currentValue){
let currentHero = changes.hero.currentValue;
//use currentHero
}
}
}
언급URL : https://stackoverflow.com/questions/34396684/input-property-is-undefined-in-angular-2s-oninit
'programing' 카테고리의 다른 글
jQuery를 사용하여 Yes(예) 또는 No(아니오) 확인 상자 (0) | 2023.08.13 |
---|---|
자바스크립트에서 window.navigate 또는 document.location을 사용해야 합니까? (0) | 2023.08.13 |
IIS 7 로그 파일 자동 삭제? (0) | 2023.08.13 |
FontAwesome 아이콘의 아이콘 색상, 크기 및 그림자 스타일 설정 방법 (0) | 2023.08.13 |
자바.java.javaNoClassDefFoundError:Log/apache/http/ProtocolVersion 확인 실패 (0) | 2023.08.13 |