2017-10-19 11 views
0

と私は私のデータベースに簡単な構造を持っている:渡すデータを正しくangularfire2/ionic2

Firebase structure

ここでアプリのロジック:私は別に、各リスト項目を削除する機能を持ついくつかのデータのリストを作成します。

データベース通信にangularefire2プラグインを使用しています。データを取得するためのコードは、コンポーネントで次のようになります。私のビュー

// Set variables 
currentUserID: any; 
visits: any[] = []; 
selectedVisit: any; 

constructor(public navCtrl: NavController, public navParams: NavParams, private dbAction: DbActionsProvider, private afDatabase: AngularFireDatabase) { 
    // Build Current User ID 
    this.currentUserID = this.dbAction.currentUserID().subscribe(data => { 
     this.currentUserID = data.uid; 
    }); 
    } 

ngOnInit() { 
    // Get data 
    this.afDatabase.object('data/users/' + this.currentUserID + '/visits') 
     .snapshotChanges().map(action => { 
     const data = action.payload.toJSON(); 
     return data; 
     }) 
     .subscribe(result => { 
     Object.keys(result).map(key => { 
      this.visits.push({ 'key': key, 'data':result[key] 
      }); 
     }); console.log(this.visits) 
    }) 
    } 

コード:

<ion-item-sliding *ngFor="let visit of visits | orderBy:'date' : false" (ionDrag)="onSelectedVisit(visit)"> 
    <ion-item> 
    <ion-icon ios="ios-man" md="md-man" item-start></ion-icon> 
    <strong>{{ !visit.data.name == '' ? visit.data.name : 'Unbekannt' }}</strong> 
    <p>Musterstraße 8, 66130 Saarbrücken</p> 
    </ion-item> 
    <ion-item-options side="right"> 
    <button ion-button>Bearbeiten</button> 
    <button ion-button color="danger" (click)="deleteVisit()">Löschen</button> 
    </ion-item-options> 
    <ion-input [(ngModel)]="visit.id"></ion-input> 
</ion-item-sliding> 

Ok..nowユーザーがアイテムを削除できることを私はしたいです。このために私はキーリファレンス(firebaseの$ keyは動作していません.....)にアクセスする必要があります。だから私は自分のオブジェクトをビルドしなければなりませんでした。あなたは別のアイデアを持っていますか?

問題:ユーザーが削除-オプションを参照する項目をスワイプする

、私は(ionDrag)= "onSelectedVisit(訪問)でデータを渡し、この機能のためのコンポーネントでの私のコード:。

onSelectedVisit(visit) { 
    this.selectedVisit = visit.key; 
    console.log(this.selectedVisit); 
} 

deleteVisit() { 
    this.afDatabase.list('data/users/' + this.currentUserID + '/visits').remove(this.selectedVisit); 
    this.navCtrl.setRoot(VisitsPage); 
} 

私は.. VisitsPage(同じページ) - 私はので、私はよりエレガントなソリューションを必要と.....理由は前に自分の建て物の私のリストに重複を見に戻って移動していない場合は

+0

ソリューションを追加するために、質問を編集するのではなく、答えとしてそれを投稿!あなた自身の質問に答えることは禁じられていません(質問に直接質問することもできます) –

+0

ああ、大丈夫です! :)私は、ありがとう! – eleinad

答えて

0

見つかったかなり解決策:

export class AppComponent { 
    itemsRef: AngularFireList<any>; 
    items: Observable<any[]>; 
    constructor(db: AngularFireDatabase) { 
    this.itemsRef = db.list('messages'); 
    // Use snapshotChanges().map() to store the key 
    this.items = this.itemsRef.snapshotChanges().map(changes => { 
     return changes.map(c => ({ key: c.payload.key, ...c.payload.val() })); 
    }); 
    } 
    addItem(newName: string) { 
    this.itemsRef.push({ text: newName }); 
    } 
    updateItem(key: string, newText: string) { 
    this.itemsRef.update(key, { text: newText }); 
    } 
    deleteItem(key: string) {  
    this.itemsRef.remove(key); 
    } 
    deleteEverything() { 
    this.itemsRef.remove(); 
    } 
} 

参考:Github - Angularfire2 Docs

関連する問題