【问题标题】:Get $key object realtime database Firebase获取 $key 对象实时数据库 Firebase
【发布时间】:2018-06-08 04:39:43
【问题描述】:

我正在 Firebase 的实时数据库中根据每个对象的 ID 或 $key 实现动态路由。我想要的是获取ID,但我找不到方法,我得到了undefinied的值。有什么想法吗?

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;}

【问题讨论】:

  • 您需要使用snapshotChanges 来获取密钥。检查这个answer
  • snapshotChanges () 为我工作出色

标签: angular typescript firebase firebase-realtime-database angularfire


【解决方案1】:

使用方括号访问对象属性,proyecto['$key']

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

【讨论】:

  • 你确定吗?我还是出来undefined
  • 发布proyecto 对象
  • 我已经包含了项目project.ts
  • 在html中打印{{ proyecto }}并发布结果
  • 结果是[object Object]
【解决方案2】:

感谢@Hareesh 分享相关话题:https://stackoverflow.com/a/47291970/8312532

这对我有用:

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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    相关资源
    最近更新 更多