2017-02-22 2 views
3

현재 첫 번째 AngularFire2 앱에서 작업하고 있습니다. firebase에서 내 구조와 일치하는 Typescript 클래스가 있습니다. 것이 때문에 생성자에 문자열 : 난 그냥 공개 키를 추가 할 수 없습니다 내 플레이어 객체의 playerkey를 원하는 경우

내 중포 기지 구조

-players 
|-playerkey 
    |-name 

내 클래스는

export class Player { 
    constructor(public name: string) {} 
} 

입니다 모든 플레이어 개체를 firebase에 밀어 넣지 못하게하십시오.

내 자신의 클래스와 개체에 AngularFire2를 사용하는 적절한 방법이 있습니까?

FirebaseObjectObservable을 사용하여 서비스간에 플레이어 개체를 전달해야합니까? 내가 아는 한, FirebaseObjectObservable을 직접 만들 수는 없습니다. 나는 그것을 방화 기지에서 얻어야한다.

답변

3

귀하는이 방법을 수행 할 수 있습니다 player.ts

export class Player { 
    constructor(public $key: string, public name: string) { 
    } 

    static fromJson({ $key, name }) { 
     return new Player($key, name); 
    } 

    static fromJsonArray(json: any[]): Player[] { 
     return json.map(Player.fromJson); 
    } 
} 

은 플레이어 인스턴스와 모든 플레이어를 가져옵니다.

playerService.ts

import { Injectable } from "@angular/core"; 
import { Observable } from "rxjs"; 
import { AngularFireDatabase } from 'angularfire2'; 
import { Player } from 'path/to/player.ts' 

@Injectable() 
export class playerService { 
    constructor(private afd: AngularFireDatabase) {} 

    getPlayers(): Observable<Player[]> { 
     return this.afd.list(`players`).map(Player.fromJsonArray); 
    } 

    savePlayer(player: Player): Observable<any> { 
     // your code to save a player 
    } 
} 

는 구성 요소

yourComponent.ts

savePlayer(name: string) { 
    let player = Player.fromJson({ name: name }); 
    delete player.$key; 

    this.playerService().savePlayer(player).subscribe(); 
} 
+0

플레이어 생성자에서이 방법을 추가 하시겠습니까? 그것이 우리가 정말로 다른 점입니다. 나는 방출 된'FirebaseObjectObservable'을 저장하고 있습니다. 내 생성자는'(개인 dbObject : FirebaseObjectObservable)'입니다. 그것은 기본적으로 내부 객체를 감싸는 래퍼입니다. (사실 나는 그 내부 관측을위한 전용 인터페이스를 가지고있다.) 나는'get key() {return this.dbObject. $ key}'라고 말할 것입니다. 누구든지 우리 편차의 장단점을 알고 있습니까? 그것은 Transfer vs Wrap과 같습니다. – Clark

+0

@Clark 우리는 구현을 비교할 수 있도록 답을 게시 할 수 있습니까? 감사합니다. – Karuban

+0

'Observable <>'이'FirebaseObjectObservable <>'과'FirebaseListObservable <>'과 같은 기능을 가지고 있는데, 그것을 사용하면 db 트리뷴에서 UI 업데이트를 변경합니까? –

관련 문제