来自提供商的angular2 firebase

时间:2017-11-02 16:49:54

标签: angular firebase firebase-realtime-database

我有一个新项目并添加了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'时,该错误消失了(但显然在组件中给出了其他错误)。

我一直在寻找几个小时,这个'解决'错误的通用版本似乎表明了循环依赖。但是不过我看一下,我似乎无法找到任何循环......任何指针都非常感激!

2 个答案:

答案 0 :(得分:2)

这是您的DataserviceProvider看起来

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

并在component中致电

this._users = db.users();

答案 1 :(得分:1)

您也可以尝试这种方式:

#prog.py
topParser=argparse.ArgumentParser()

subParsers = topParser.add_subparsers(
    title='SubCommands', 
    description='Use "prog.py <subCommand> (-h | --help)" to learn more about each subcommand', 
    help='I can do stuff')

subParser1 = subParsers.add_parser('use1', help="Use1 does one thing")
subParser2 = subParsers.add_parser('use2', help='Use2 does another thing')

subParser1.add_argument(
    '-f','--first-arg-for-use1',
    help="A text file",
    required=True
    )

subParser1.add_argument(
    '-s','--second-arg-for-use1',
    help="An encoding",
    required=True
    )

subParser2.add_argument(
    '-f','--first-arg-for-use2',
    help="An image format",
    required=True
    )

args = topParser.parse_args()
print(args)

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