2017-11-07 9 views
0

私はfirebaseのfirestoreベータサービスデータベースの役割を管理するために追加するユーザーサービスを用意しています。私はすでにコレクションといくつかの文書をデータベースに追加しました。サービスは別のメソッドにインジェクションされるので、サービス内のコンストラクタが呼び出され、コレクションがロードされると思っていましたが、データがコンソールに記録されず、コレクションがロードされないため、snapshotChanges()は値を送出しません。AngularFirestoreCollection snapshotChanges()はサービスコンストラクタで値を出力しません

このコードをサービスコンストラクタで実行する際に問題があるのだろうか?

app.module.ts

import { Component } from '@angular/core'; 
import { AuthService } from './auth.service'; 
import {UserService} from './user.service'; 
import {Router} from '@angular/router'; 

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'] 
}) 
export class AppComponent { 
    constructor(private auth: AuthService, router: Router, private userService: UserService) { 
    auth.user$.subscribe(user => { 
     if (user) { 
      const returnUrl = localStorage.getItem('returnUrl'); 
      router.navigateByUrl(returnUrl); 
      userService.getAppUsers(); 
      userService.addUser(user); 
     } 
    }); 
    } 

} 

user.service.ts

import { Injectable } from '@angular/core'; 
import { AngularFirestore, AngularFirestoreCollection, AngularFirestoreDocument } from 'angularfire2/firestore'; 
import * as firebase from 'firebase'; 
import { Observable } from 'rxjs/Observable'; 

interface AppUser { 
    name: string; 
    email: string; 
    isAdmin: boolean; 
} 

@Injectable() 
export class UserService { 
    AppUserCollection: AngularFirestoreCollection<AppUser>; 
    AppUsers$: Observable<any[]>; 

    constructor(public db: AngularFirestore) { 
    this.AppUserCollection = this.db.collection('users'); 
    } 

    getAppUsers() { 
    alert("here"); 
    return this.AppUsers$ = this.AppUserCollection.snapshotChanges() 
    .map(actions => { 
     alert('there'); 
     return actions.map(a => { 
     const data = a.payload.doc.data() as AppUser; 
     console.log('Data' + data); 
     const id = a.payload.doc.id; 
     return { id, data }; 
     }); 
    }); 
    } 
    addUser(user: firebase.User) { 
     this.db.collection('users').add({'name': user.displayName, 'email': user.email, 'isAdmin': false}); 
    } 
    // } 
} 
+0

router.navigateByUrl(returnUrl) – Hareesh

+0

のサービスを追加する前に、自分でテストしてみてください。あまりコードはありません。 – arod

答えて

0

はthis.AppUsersに加入してください。

this.AppUsers = this.AppUserCollection.snapshotChanges() 
    .map(actions => { 
    return actions.map(a => { 
     const data = a.payload.doc.data() as AppUser; 
     console.log('Data' + data); 
     const id = a.payload.doc.id; 
     return { id, data }; 
    }).subscribe(); 
+0

で推測している解決策を提示することに意味がないので、コードで何を意味するのか説明できますか? – arod

+0

私の答えを更新しました。 – JuanPablo

+0

これは既に使用しているコードです – arod

関連する問題