2017-12-27 10 views
-1

Ich implementiere dynamische Routen in der Echtzeitdatenbank von Firebase basierend auf der ID oder $key jedes Objekts. Was ich will, ist die ID zu bekommen und ich kann den Weg nicht finden, ich bekomme den Wert undefinied. Irgendwelche Ideen?

enter image description here

enter image description here

portafolio.component.html

<div class="container my-5"> 
<h1>Portafolio</h1> 
<div class="row"> 
    <div class="col-md-4" *ngFor="let proyecto of proyectos | async"> 
     <div class="card my-3"> 
      <div class="card-body"> 
       <h4 class="card-title">{{ proyecto.titulo }}</h4> 
       <a class="btn btn-primary" [routerLink]="['/portafolio', proyecto.$key]">Ver detalles</a> 
      </div> 
     </div> 
    </div> 
</div> 

portafolio.component.ts

import { Component, OnInit } from '@angular/core'; 
 
import { AngularFireDatabase, AngularFireList, AngularFireObject } from 'angularfire2/database'; 
 

 

 
@Component({ 
 
    selector: 'app-portafolio', 
 
    templateUrl: './portafolio.component.html', 
 
    styleUrls: ['./portafolio.component.scss'] 
 
}) 
 
export class PortafolioComponent implements OnInit { 
 

 
    proyectos: any; 
 

 
    constructor(private db: AngularFireDatabase) { } 
 

 
    ngOnInit() { 
 

 
     this.proyectos = this.db.list('proyectos').valueChanges(); 
 

 
    } 
 

 
}

proyecto.ts

export interface Proyecto { 
$key?: string; 
titulo?: string; 
destacado?: string; 
descripcion?: string;} 
+3

Sie müssen 'snapshotChanges verwenden 'um das zu bekommen Schlüssel. Überprüfen Sie diese [Antwort] (https://stackoverflow.com/questions/47291644/angular-firebase-5-objects-keys-not-being-displayed-so-cant-delete/47291970#47291970) – Hareesh

+0

Ausgezeichnet arbeitete für mich mit 'snapshotChanges()' –

Antwort

0

Verwenden Sie die eckigen Klammern die Objekteigenschaft zuzugreifen, proyecto['$key']

<a class="btn btn-primary" [routerLink]="['/portafolio', proyecto['$key']]">Ver detalles</a> 
+0

bist du sicher? Ich komme immer noch "undefined" –

+0

Post das 'proyecto' Objekt –

+0

Ich habe das Projekt projects.ts –

0

Dank für die gemeinsame Nutzung im verwandten Thema @Hareesh: https://stackoverflow.com/a/47291970/8312532

Dieser arbeitete für mich:

portafolio.component.ts

import { Component, OnInit } from '@angular/core'; 
 
import { AngularFireDatabase, AngularFireList} from 'angularfire2/database'; 
 
import { Observable } from "rxjs/Observable"; 
 

 

 

 
@Component({ 
 
    selector: 'app-portafolio', 
 
    templateUrl: './portafolio.component.html', 
 
    styleUrls: ['./portafolio.component.scss'] 
 
}) 
 
export class PortafolioComponent implements OnInit { 
 

 
    todosProyectos: AngularFireList<any>; 
 
    proyectos: Observable<any[]>; 
 

 
    constructor(private db: AngularFireDatabase) { } 
 

 
    ngOnInit() { 
 

 
    this. todosProyectos = this.db.list('proyectos'); 
 

 
    this.proyectos = this.todosProyectos.snapshotChanges().map(changes => { 
 
     return changes.map(c => ({ key: c.payload.key, ...c.payload.val() })); 
 
    }); 
 

 

 
    } 
 

 
}

portafolio.component.html

<div class="container mt-5"> 
<h1>Portafolio</h1> 
<div class="row"> 
    <div class="col-md-4" *ngFor="let proyecto of proyectos | async"> 
     <div class="card my-3"> 
      <div class="card-body"> 
       <h4 class="card-title">{{ proyecto.titulo }}</h4> 
       <a class="btn btn-primary" [routerLink]="['/portafolio', proyecto.key]">Ver detalles</a> 
      </div> 
     </div> 
    </div> 
</div> 

Verwandte Themen