2017-07-06 11 views
1

Firebaseデータベース内のある場所への購読を解除したいと思います。私はIonic 3とAngularFire2を使用しています。AngularFire dbの観測/購読を解除するにはどうすればいいですか?

しかし、私はサブスクリプションを作成するためにどのような種類のデータ型を使用するのか分かりません。今のところ、私はサブスクライブできないものがFirebaseObjectObservable<any>です。

私は(私はafAuth.auth.signOut()を呼び出すときに)サインアウトしようとしたときに脱退しないと、私は次のエラーを打つ:

Runtime Error** 
permission_denied at /parents/<auth.uid>: Client doesn't have permission to access the desired data. 

Stack** 
Error: permission_denied at /parents/<auth.uid>: Client doesn't have permission to access the desired data. 
    at G (http://localhost:8100/build/main.js:36366:36) 
    at Object.G (http://localhost:8100/build/main.js:36370:86) 
    at Lg (http://localhost:8100/build/main.js:36342:98) 
    at Ag.g.wd (http://localhost:8100/build/main.js:36335:310) 
    at og.wd (http://localhost:8100/build/main.js:36325:364) 
    at Yf.Xf (http://localhost:8100/build/main.js:36323:281) 
    at ag (http://localhost:8100/build/main.js:36307:464) 
    at WebSocket.Ia.onmessage (http://localhost:8100/build/main.js:36306:245) 
    at WebSocket.o [as __zone_symbol___onmessage] (http://localhost:8100/build/polyfills.js:2:24340) 
    at t.invokeTask (http://localhost:8100/build/polyfills.js:3:9967) 

私は「ので、まだそれが今にアクセスできません何かを読んしようとしているのでmは認証されていません。

マイFirebaseルール:

{ 
    "rules": { 
    ".read": "auth != null", 
    ".write": "auth != null" 
    } 
} 

マイhome.tsファイル:

import { Component } from '@angular/core'; 
import { NavController } from 'ionic-angular'; 
import { AngularFireDatabase, FirebaseObjectObservable, FirebaseListObservable } from 'angularfire2/database'; 
import { AngularFireAuthModule, AngularFireAuth } from 'angularfire2/auth'; 

@Component({ 
    selector: 'page-home', 
    templateUrl: 'home.html' 
}) 
export class HomePage { 

    //What datatype should I make this? 
    profileResult: FirebaseObjectObservable<any>; 

    constructor(public navCtrl: NavController, 
       private db: AngularFireDatabase, 
       private afAuth: AngularFireAuth) { 


    } 

    ngOnInit() { 
    //Get authentication state 
    this.afAuth.authState.subscribe(
     (auth) => { 

      //if authenticated, get profile information for db and display using profileResult 
      if (auth != null) { 
      this.db.object('/parents/' + auth.uid).subscribe(profileResult => { 
       this.profileResult = profileResult; 
       console.log(profileResult); 
      }); 
      } 
     }); 
    } 

    /* What I would like to do, but can't unsubscribe from FirebaseObjectObservable 
    ngOnDestroy() { 
    this.profileResult.unsubscribe(); 
    } 
    */ 

    //calling this results in my error 
    signOut() { 
    this.afAuth.auth.signOut(); 
    } 

} 

マイhome.htmlファイル:

<ion-header> 
    <ion-navbar> 
    <ion-title> 
     My Awesome App 
    </ion-title> 
    </ion-navbar> 
</ion-header> 

<ion-content padding> 

{{ profileResult?.firstName }}<br /> 
{{ profileResult?.lastName }}<br /> 
{{ profileResult?.youngestChildAge }}<br /> 
{{ profileResult?.interests }}<br /> 
{{ profileResult?.facebookUrl }}<br /> 
<button full ion-button (click)="signOut()">Sign Out</button> 

</ion-content> 

私は何を変更することができますprofileResult: FirebaseObjectObservable<any>;と両方のデータをキャプチャするだけでなく、退会することもできますか?

答えて

1

あなたはfirst演算子を使用することができます

import 'rxjs/add/operator/first'; 
    this.db.object('/parents/' + auth.uid).first().subscribe(profileResult => { 
    this.profileResult = profileResult; 
    console.log(profileResult); 

}); 
0

退会をご希望ですか?あなたのケースでは

mySubscription : any; 


mySubscription = this.db.object('/parents/' + auth.uid).subscribe(profileResult => { 
    this.profileResult = profileResult; 
    console.log(profileResult); 

}); 


mySubscription.unsubscribe(); 
関連する問題