You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 5/Firebase 5中AngularFireList.snapshotChanges()报错求助

解决Angular 5 + Firebase 5中订阅AngularFireList的TypeError: Object(...) is not a function问题

嘿,我看了你的错误日志和代码,发现几个关键问题,咱们一步步来修复:

1. 先修正低级的方法名不匹配问题

你的服务里定义的是getCustomers()方法,但控制器里却调用了this.firebase.getServiceProviders()——这明显是手滑写错了,先把这个改过来:

// 控制器里修正调用语句
const x = this.firebase.getCustomers();

2. 排查AngularFire与Angular/Firebase的版本兼容性

Angular 5对应的AngularFire版本得是AngularFire2 5.x(也就是@angular/fire 5.x),而Firebase 5.x是适配这个版本的。如果你的依赖版本不对,就会出现这种Object(...) is not a function的错误,因为高版本AngularFire用了RxJS 6的语法,而Angular 5默认搭配的是RxJS 5。

调整依赖版本

打开你的package.json,确保依赖是下面这样的:

{
  "dependencies": {
    "@angular/common": "^5.2.0",
    "@angular/fire": "^5.4.2", // 这个版本完美适配Angular 5和Firebase 5
    "firebase": "^5.12.0",
    "rxjs": "^5.5.12", // Angular 5必须用RxJS 5.x
    "zone.js": "^0.8.29"
  }
}

改完后执行npm install重新安装依赖。

3. 修正服务中的AngularFireDatabase注入与调用

你的服务里写的this.fire.list('users')是错的,应该先注入AngularFireDatabase实例,再调用它的list方法:

import { Injectable } from '@angular/core';
import { AngularFireDatabase, AngularFireList } from '@angular/fire/database';

@Injectable({
  providedIn: 'root'
})
export class FirebaseService {
  customers: AngularFireList<any>;

  // 正确注入AngularFireDatabase
  constructor(private db: AngularFireDatabase) { }

  getCustomers(){
    this.customers = this.db.list('users'); // 用db.list替代错误的this.fire.list
    return this.customers;
  }
}

4. 规范控制器的代码写法

控制器里的代码有两个问题:一是不能在构造函数里直接写业务逻辑(应该用ngOnInit生命周期钩子),二是语法不符合TypeScript规范,修正后的代码如下:

import { Component, OnInit } from '@angular/core';
import { FirebaseService } from './path-to-your-firebase-service';
import { ServiceProvider } from './path-to-your-service-provider-model';

@Component({
  selector: 'app-your-component',
  templateUrl: './your-component.component.html',
  styleUrls: ['./your-component.component.css']
})
export class YourComponent implements OnInit {
  // 初始化空数组,避免undefined问题
  serviceProviders: ServiceProvider[] = [];

  constructor(private firebase: FirebaseService) { }

  ngOnInit() {
    const customersList = this.firebase.getCustomers();
    customersList.snapshotChanges().subscribe(items => {
      // 用map简化遍历逻辑,更简洁
      this.serviceProviders = items.map(item => {
        const customerData = item.payload.toJSON();
        customerData["$key"] = item.key;
        return customerData as ServiceProvider;
      });
    });
  }
}

按照上面的步骤逐一修正,应该就能解决这个错误了。

内容的提问来源于stack exchange,提问作者Lakshan Thilakarathne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:22:33