【问题标题】:Angular6/Firebase2 | ERROR TypeError: this.clientService.getClients(...).subscribe is not a functionAngular6/Firebase2 |错误类型错误:this.clientService.getClients(...).subscribe 不是函数
【发布时间】:2018-12-25 20:31:41
【问题描述】:

我在从 Firebase 获取数据(在本例中为用户列表)时遇到了一些问题。

版本信息

Angular 版本 6

Firebase 4.13.1

Angualrfire2 5.0.0-rc.7.2

浏览器中出现错误

DashboardComponent.html:1 错误类型错误: this.clientService.getClients(...).subscribe 不是函数 在 ClientsComponent.push../src/app/components/clients/clients.component.ts.ClientsComponent.ngOnInit (clients.component.ts:19) 在 checkAndUpdateDirectiveInline (core.js:8939) 在 checkAndUpdateNodeInline (core.js:10203) 在 checkAndUpdateNode (core.js:10165) 在 debugCheckAndUpdateNode (core.js:10798) 在 debugCheckDirectivesFn (core.js:10758) 在 Object.eval [作为 updateDirectives] (DashboardComponent.html:1) 在 Object.debugUpdateDirectives [as updateDirectives] (core.js:10750) 在 checkAndUpdateView (core.js:10147) 在 callViewAction (core.js:10388)

这是我的 client.service.ts

import { Injectable } from '@angular/core';
import { AngularFireDatabase, FirebaseListObservable, FirebaseObjectObservable } from 'angularfire2/database-deprecated';
import { Observable, of } from 'rxjs';
import { Client } from '../models/Client';

@Injectable({providedIn:'root'})
export class ClientService {

  clients: FirebaseListObservable <any[]>;
  client: FirebaseObjectObservable <any>;

  constructor(public af:AngularFireDatabase) { 
    this.clients = this.af.list('/clients') as FirebaseListObservable<Client[]>;
  }

  getClients():FirebaseListObservable <any[]> {
    return this.clients;
  }

}

这是我的 clients.component.ts

import { Component, OnInit } from '@angular/core';
import { ClientService } from '../../services/client.service';
import { Client } from '../../models/Client';

@Component({
  selector: 'app-clients',
  templateUrl: './clients.component.html',
  styleUrls: ['./clients.component.css']
})
export class ClientsComponent implements OnInit {

  clients:Client[];

  constructor(public clientService:ClientService) {

   }

  ngOnInit() {
    this.clientService.getClients().subscribe( clients => {
      this.clients = clients;
      console.log(this.clients);
    });
  }

}

这是我的客户端界面

export interface Client {

    $key?:string;
    firstName?:string;
    lastName?:string;
    email?:string;
    phone?:string;
    balance?:number;

}

我已经尝试了几乎所有现有解决方案来解决这个错误和/或让 firebase2 与 Angular 6 一起工作,但我似乎无法解决这个问题。

感谢任何帮助,谢谢!

【问题讨论】:

    标签: javascript angular firebase firebase-realtime-database


    【解决方案1】:

    它是 AngularFireObject 不是 FirebaseObjectObservableAngularFireList 不是 FirebaseListObservable

    查看更多详情:https://github.com/angular/angularfire2/blob/master/docs/version-5-upgrade.md

    https://github.com/angular/angularfire2/blob/master/docs/rtdb/objects.md

    import { AngularFireObject, AngularFireList } from 'angularfire2/database';
    
    @Injectable({providedIn:'root'})
    export class ClientService {
    
      clients: Observable<any[]>;
      clientRef:AngularFireObject<any>;
    
    
      constructor(public af:AngularFireDatabase) {
        this.clientRef = db.object('item');
        this.clients = this.af.list('/clients').valueChanges();
      }
    
      getClients():FirebaseListObservable <any[]> {
        return this.clients;
      }
    
    }
    

    【讨论】:

    • 感谢您的及时回复和帮助,这解决了我的问题。链接的文档也非常有用!
    【解决方案2】:

    这是因为this.af.list('/clients') 返回的对象类型不是bservable。这是AngularFireList 类型。要将其转换为可观察的,您需要使用 valueChanges()snapshotChanges() 方法。因此,更新 ClientService 的构造函数代码应该可以工作:

      clients: Observable<any[]>;
    
      constructor(public af:AngularFireDatabase) { 
        this.clients = this.af.list('/clients').valueChanges();
      }
    

    【讨论】:

    • 感谢您的帮助 - 这里分享的两个答案共同解决了我的问题!
    • @nauf 很高兴它有帮助!
    猜你喜欢
    • 1970-01-01
    • 2018-04-28
    • 2019-02-14
    • 2021-10-02
    • 2021-10-30
    • 2018-11-22
    • 2017-10-12
    • 2020-06-05
    • 2023-03-15
    相关资源
    最近更新 更多