Angular Liste mit Objekten anderem Component übergeben?

2 Antworten

Es gibt in Angular generell zwei Möglichkeiten Daten von Komponenten zu übertragen:

  • Daten einer Kind-Komponente senden mit @Input-Decorator in der Kind-Komponente und Property-Binding
  • Daten einer Eltern-Komponente senden mit @Output-Decorator und EventEmitter in der Kind-Komponente

So wie es sich für mich anhört möchtest du von Autobahn (parent) zum Autofolder (child) die Daten senden? Dann wäre es ersteres mit einem @Input-Decorator.

Siehe mehr dazu: https://angular.io/guide/inputs-outputs

Eventuell wäre es nützlicher die Autos in einem Service auszulagern, wenn es an mehreren Stellen benutzt wird und den dann in die Komponente zu injecten.

Hannes00133 
Fragesteller
 08.06.2022, 13:37

Aber nach meiner Orderstruktur ist doch weder das eine noch das andere ein Parent oder Child, oder verstehe ich da was falsch.

0
Hannes00133 
Fragesteller
 08.06.2022, 13:56
@Genussgift

meine HTML sind in etwa so aus, also in app.component.html

<div>
    <div class="row">
        <div class="col-lg-2">
            <app-autofolder></app-autofolder>
        </div>
        <div class="col-lg-10">
            <app-autobahn ></app-autobahn>
        </div>
    </div>
</div>
0
Genussgift  08.06.2022, 14:10
@Hannes00133

Das sind genau nicht die beiden Arten, lol. Da diese Elemente quasi nichts miteinander zu tun haben, teilen sie sich einen globalen Zustand. Würde die Autos in einem Service auslagern der die beiden Komponenten füttert und im Service befindet sich dann der Zustand, der für beide gültig ist.

0
Hannes00133 
Fragesteller
 08.06.2022, 14:36
@Genussgift

Alles klar, vielen Dank.
Evtl. kannst du mir bei meinem Service auch kurz helfen.
Ich habe bisher das:

transfer-list.service.ts

@Injectable({
  providedIn: 'root'
})
export class TransferAutoListService {

    private autos: any = [];

    setAutos(auto: any) {
        this.autos.push(auto);
    }

    getAutos() {
        return this.autos;
    }
}

autobahn.component.ts

this.transferAutoListeService.setAutos(this.auto);

autofolder.component.ts

export class AutofolderComponent implements OnInit {

    public autos: any = [];

    constructor(private transferAutoListService: TransferAutoListService) {
        this.autos = transferListService.getAutos();
    }

  ngOnInit(): void {
    console.log(this.autos);

  }

}

in der autofolder.component.ts gibt der durch die console.log zwar die Liste mit den Autos darin aus, aber ...

.... das funktioniert nicht...

console.log(this.autos[0].name);

... obwohl meine Autos beim erstellen immer einen Namen erhalten.

0
Genussgift  08.06.2022, 14:47
@Hannes00133

Weiß nicht, liegt es vielleicht daran, dass autos: any ist, er den Typ also nicht deklariert ist? So ins Blaue geraten.

Ich würde noch ein Interface Auto anlegen, und dann das Array als Typ Auto machen, dann ist es auch typsicher.

0

Angular ist ein rotes Tuch für mich aber Du hast ja autobahn.component.ts im Ordner autobahn. Kann es sein, dass Du den Ordner auch angeben musst also vollqualifiziert? Leider wie gesagt komm ich aus einer anderen Schule und mach weniger Web. Keine Ahnung, nur mein 1. Verdacht, kann auch sein, dass ich total daneben liege und der Fehler ganz woanders ist, wie bei Software üblich.

Woher ich das weiß:Berufserfahrung