angular firebase 数据订阅和获取错误

angular firebase data subsribing and fetching error

My motive is to get userdetails from firebase 

我的firebase.service.ts

import { Injectable } from '@angular/core';
import { AngularFireDatabase } from 'angularfire2/database';
import { AngularFirestore } from '@angular/fire/firestore';
import { Observable } from 'rxjs/Observable';
import { Subject } from 'rxjs/Subject';
import { Subscription } from 'rxjs';
import { Component } from '@angular/core';
import 'rxjs/add/operator/catch';
import { map, filter, switchMap } from 'rxjs/operators';
import 'core-js/es6/reflect';
@Injectable({
  providedIn: 'root'
})
export class FirebaseService {
  users : any;
  unreadBooks: Observable<any>;
  constructor(private db: AngularFireDatabase) { }

  getUserDetails(id) {
    console.log('in getUserDetails()'+id);

    this.users = this.db.object('/users/' + id).valueChanges();
    console.log('in getUserDetails()' + this.users.password);

    return this.users;
  }
}

我的登录-component.ts

**import { Component, OnInit } from '@angular/core';
import { FirebaseService } from "../services/firebase.service";
import { User } from '../interfaces/user';
import { Observable } from 'rxjs';
import { AngularFireDatabase } from 'angularfire2/database';
import * as firebase from 'firebase/app';
import { ActivatedRoute, Router } from "@angular/router";
@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit {
  users: Array<User> = [];
  username:any;
  password;
  constructor(private firebaseService: FirebaseService, private router: Router, private route: ActivatedRoute) {


  }
  ngOnInit() {
  }
  login() {
    this.firebaseService.getUserDetails(this.username).subscribe(user => {
      console.log('user name: ' + user.username);
    });
   }

}

我的登录-component.html

<mat-toolbar>User  Login  </mat-toolbar>
<div class="add-book-form">
  <mat-card >

    <form (submit)="submitAdd()" #myForm="ngForm">
      <mat-form-field class="full-width">
        <input matInput placeholder="User name " [(ngModel)]="username" name="title" >
      </mat-form-field>
      <br />
      <mat-form-field class="full-width">
        <input matInput placeholder="Password" [(ngModel)]="password" name="password" >
      </mat-form-field>

      <br /><br />

            <mat-card-actions>
              <button (click)="login()" mat-raised-button color="warn" value="submit" [disabled]="!myForm.form.valid"> Login </button>

              <button mat-button mat-raised-button class="editButton" [routerLink]="['/Register']">  Reg</button>


            </mat-card-actions>
</form>
  </mat-card>
</div>

我的 firebase 数据库

我在 firebase 中有数据库,如上图所示,我正在从服务中获取数据-componet.ts 并在登录时订阅它。componet.ts。我正在获取在 login.componet.html 页面中输入的用户名。虽然我在 html 页面中输入的用户名存在于 firebase 中,但我没有得到 login-component.ts 方法订阅未被调用。

您没有订阅它。和值更改 returns 您需要等待承诺解决的承诺。

 getUserDetails(id) {
    console.log('in getUserDetails()'+id);
   this.db.object('/users/' + id).valueChanges().subscribe((user) => {
      console.log('in getUserDetails()' + user.password);
      this.user = user; <-- this will capture the value 
    });    
 }