【问题标题】:angular2 firebase from a provider not working来自提供商的 angular2 firebase 无法正常工作
【发布时间】:2018-04-15 06:58:08
【问题描述】:

我有一个新项目并添加了 angularfire2:

npm install angularfire2 firebase --save

在 app.module.ts 我导入模块并初始化它:

import { AngularFireModule } from 'angularfire2';
...
imports: [
...
  AngularFireModule.initializeApp(firebaseconfig)

然后我可以通过这样的导入在我的组件中使用它:

import { AngularFire, FirebaseListObservable } from 'angularfire2';
...
constructor(public navCtrl: NavController, public navParams: NavParams,
  public af: AngularFire) {
  this._users = af.database.list('users').valueChanges();
}

一切都很好。

但我想将该数据库处理移至提供程序。所以我创建了一个提供程序,将名称添加到 app.module.ts providers[] 并将其导入到我的组件中:

constructor (constructor(public navCtrl: NavController, public navParams: NavParams,
  public db: DataserviceProvider) {
  this._users = db.users().valueChanges();
}

提供者如下所示:

@Injectable()
export class DataserviceProvider {
  private _users: FirebaseListObservable<any[]>;

  constructor(public af: AngularFire) {
    this._users = af.database.list('users').valueChanges();
  }
  users(): FirebaseListObservable<any[]> {
    return this._users;
  }
}

然后给我一个奇怪的错误:

compiler.es5.js:1694 Uncaught Error: Can't resolve all parameters for DataserviceProvider: (?).

当我从构造函数中删除“public af:AngularFire”时,该错误消失了(但显然在组件中给出了其他错误)。

我一直在寻找几个小时,那个“解决”错误的通用版本似乎表明一个循环依赖。但是无论我怎么看,我似乎都找不到任何循环。任何指针都非常感谢!

【问题讨论】:

标签: angular firebase firebase-realtime-database


【解决方案1】:

你也可以这样试试:

import { Component, OnInit } from '@angular/core';
import { AngularFireDatabase } from 'angularfire2/database'; 
import { Observable } from 'rxjs/Observable';
@Component({
  selector: 'courses-list',
  templateUrl: 'courses-list.component.html',
  styles: []
})
export class CoursesListComponent implements OnInit {
  coursesObservable: Observable<any[]>;
  constructor(private db: AngularFireDatabase) { }
  ngOnInit() {
    this.coursesObservable = this.getCourses('/courses');
  }
  getCourses(listPath): Observable<any[]> {
    return this.db.list(listPath).valueChanges();
  }
}

或者更多信息,你可以访问整个应用程序(angular2,5+firebase+bootsrap): https://codingthesmartway.com/building-an-angular-5-project-with-bootstrap-4-and-firebase/

【讨论】:

  • 好奇!只需使用 AngularFireDatabase 而不是 AngularFire 就可以正常工作,使用 FirebaseListObservables 等等。感觉像一个错误,但也许它按预期工作。 AngularFire 文档没有提到组件和提供者使用之间的区别......谢谢!
【解决方案2】:

这就是您的DataserviceProvider 的外观

constructor(private af: AngularFireDatabase) {
    this._users = af.database.list('users');
}
users(): FirebaseListObservable<any[]> {
    return this._users.valueChanges();
}

在您的component 中拨打电话

this._users = db.users();

【讨论】:

  • 这是有道理的,但不幸的是它仍然给出了同样的错误。似乎这是 AngularFire 中的一个错误,因为当我使用 AngularFireDatabase 时,它​​会按预期工作!
  • 哎呀,一定是AngularFireDatabase 我没注意到
猜你喜欢
  • 2021-01-19
  • 2017-10-06
  • 2023-03-12
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多