Weboldal keresés

javascript - az @Input() tulajdonság az Angular komponensben üres tömböt ad vissza


Van egy naptár komponensem, amelynek adatszolgáltatása a @Input(): díszítéssel rendelkezik

import { Component, OnInit, Input, OnChanges, SimpleChanges } from '@angular/core';

@Component({
  selector: 'app-calendar',
  templateUrl: './calendar.component.html',
  styleUrls: ['./calendar.component.css']
})
export class CalendarComponent implements OnInit, OnChanges {
  @Input() data: CalendarDay[];

  constructor() {
    this.data = [];
  }

  ngOnInit() {
    this.initDays();
  }

  ngOnChanges(changes: SimpleChanges) {
    console.log(this.data);
    console.log(changes.data);
  }
}

Így adok át adatot egy másik komponensből:

<app-calendar [data]="this.calendarData"></app-calendar>

És a továbbított adatokat a *ngFor jeleníti meg a naptár komponensben (tökéletesen megjelenik, és minden rendben működik):

<div *ngFor="let item of data">{{item.date}}</div>

Először szeretném feldolgozni ezt az adatot, mielőtt kirenderelném a nézetbe, és valahányszor megpróbálom a console.log-tal kiíratni az adat tulajdonságot a naptár komponensben, furcsa tömböt kapok, üresnek jelenik meg, de meg tudom 'nyitni' a böngésző konzoljából:

.

És amikor így próbálok értéket naplózni:

console.log(this.data[0])

vagy

console.log(changes.data.currentValue[0])

Az undefined értéket kapom.

Válasz #1

Töröld a this.data=[]-t a konstruktorból, kerüld el bármi megváltoztatását, amikor függőséginjektálást használsz.

És használja a set és a get parancsot minden Input() esetében, amit a sablonjában szeretne használni, ez egy bevált gyakorlat.

  private _data: CalendarDay[];

  @Input() set data(data: CalendarDay[]) {
    if(data) {
     this._data = data;
    }
  }

  get data(): CalendarDay[] {
    return this._data;
  }

És az HTML-edben így kell átadnod:

<app-calendar [data]="calendarData"></app-calendar>

A naptár komponensben használhatja a következőkkel

<div *ngFor="let item of data">{{item.date}}</div>

Kapcsolódó cikkek