私は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});
}
// }
}
router.navigateByUrl(returnUrl) – Hareesh
のサービスを追加する前に、自分でテストしてみてください。あまりコードはありません。 – arod