2017-10-08 3 views
0

저는 현재 googles firebase로 뭔가를 만들려고하고 있는데 문제가 생겼습니다. 이 코드 조각이firebase 데이터베이스에서 ID를 검색 중입니다.

(적어도 그게 내가 읽은 튜토리얼에서 무슨 짓을했는지) 당신에게 데이터베이스에있는 개체의 키와 $ 키를 사용하여 객체를 제공하기 위해

export class FirebaseService { 
    items: Observable<Item[]>; 

    constructor(private db: AngularFireDatabase){ 

    } 

    getBusinesses(){ 
     this.businesses = this.db.list('/items').valueChanges() as Observable<Item[]> 
     return this.items; 
    } 

} 

를 사용하는 것 같습니다 문제는, 그 $ 키가 정의되지 않은 나는 궁금해서, 어떻게 열쇠를 포함하여 개체를 반환하는 목록 - 메서드를 얻을거야. 잠시 동안 노력했지만 오류를 찾을 수 없습니다. 누군가 대답을 알면 기쁠 것입니다.

[편집]

https://github.com/angular/angularfire2/blob/master/docs/version-5-upgrade.md 이 나에게 솔루션에 좀 더 가까이 가져왔다. 버전 5.0.0에서는 angularfire2가 일부 주요 변경 사항을 보았습니다. 하지만 여전히 학습 중이므로 실제로 코드에 통합 할 수는 없습니다. 순간 그것은이

firebase.service.ts

import { Injectable } from '@angular/core'; 
import { AngularFireModule } from 'angularfire2'; 
import { AngularFireDatabase, AngularFireDatabaseModule } from 'angularfire2/database'; 
import { FirebaseListObservable } from 'angularfire2/database-deprecated'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/map'; 
import {Business} from '../Business'; 
import {Category} from '../Category'; 

@Injectable() 
export class FirebaseService { 
    businesses : Observable<Business[]>; 
    categories : Observable<Category[]>; 

    constructor(private db: AngularFireDatabase){ 

    } 

    getBusinesses(){ 
     this.businesses = this.db.object('/businesses').snapshotChanges().map(action => { 
      console.log('ACTION:'); 
      console.log(action); 
      const $key = action.payload.key; 
      const data = {$key, ...action.payload.val()}; 
      return data; 
     }) as Observable<Business[]>; 
     return this.businesses; 
    } 
} 

처럼 보이는

import { Component, OnInit } from '@angular/core'; 
import { AngularFireDatabase } from 'angularfire2/database'; 
import { Observable } from 'rxjs/Observable'; 
import { FirebaseService } from './services/firebase.service'; 
import { Business } from './Business'; 
import { Category } from './Category'; 

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'] 
}) 
export class AppComponent { 
    title = 'app'; 
    items: Observable<any[]>; 
    businesses: Business[]; 
    categories: Category[]; 
    appState: string; 
    activeKey: string; 

    constructor(private _firebaseService: FirebaseService){ 

    } 

    ngOnInit(){ 
     this._firebaseService.getBusinesses().subscribe(businesses => { 
      console.log('Businesses:'); 
      console.log(businesses); 
      this.businesses = businesses; 
     }); 
    } 


} 

지금 내 결과는 내가 그것이달라고하지 같다 app.component.ts. 기본적으로 내가 돌아 오는 것은

{ 
    0: { 
     Key01: "xyz", 
     Key02: "yyy" 
    }, 
    1: { 
     Key11: "zyx", 
     Key12: "zzz" 
    }, 
    $key: "businesses" 
} 

계속 노력하겠습니다. 어쩌면 내가 뭘 잘못하고 있는지 알 수있을거야. 도움을 주셔서 감사합니다 지금까지

[/ 편집] 당신은 FirebaseListObservable<Item[]>으로 항목을 선언합니다 (getBusinesses을 할 필요가

+0

.object()로 .list()를 바꾸면 불행히도 그 작업을하지 못했습니다. – Wandrille

+0

. 열쇠없이 객체를 계속 가져옴 – Chris

답변

0

) 아래와 같이 전화 :

this.items= this.af.list('/items') as FirebaseListObservable<Item[]>; 

희망이 당신이 얻을 도움이 될 것입니다 $ 키 값.

+0

불행히도 FirebaseListObservable을 가져올 수 없습니다. 'angularfire2'나 'agularfire2/database'에서는 발견되지 않습니다. 버전 5.0.0을 사용하고 있습니다. 내가 다른 것을 사용해야할까요? [편집] 이제 rxjs/Observable을 https://stackoverflow.com/questions/43799052/angularfire-and-firebaselistobservable-has-no-exported-member-angularfire2-로 사용하는 것으로 보입니다. FirebasListObservable은 더 이상 사용되지 않습니다. :/ – Chris

+0

좋아, 나 한 걸음 더 가까이. https://github.com/angular/angularfire2/blob/master/docs/version-5-upgrade.md 이렇게하면 좀 더 명확 해졌지만 여전히 서비스와 앱을 변경하는 방법을 알 수 없습니다. 구성 요소. 내 질문을 편집 할 것입니다. 여기에 설명하기가 어렵 기 때문입니다. – Chris

관련 문제