NullInjectorError:InjectionToken angularfire2.app.options 没有提供程序

Posted

技术标签:

【中文标题】NullInjectorError:InjectionToken angularfire2.app.options 没有提供程序【英文标题】:NullInjectorError: No provider for InjectionToken angularfire2.app.options 【发布时间】:2019-08-10 00:38:01 【问题描述】:

我正在尝试将表单数据插入云 Firestore 数据库。下面是我的 x.component.ts 文件,我在其中编写的构造函数出现错误

private firestore: AngularFireStore

    import  Component, OnInit  from '@angular/core';
    import  GroupService  from '../shared/group.service';
    import  NgForm  from '@angular/forms';
    // import  NullTemplateVisitor  from '@angular/compiler';
    import  AngularFirestore  from '@angular/fire/firestore';
    // import  AngularFireModule  from 'angularfire2';
    // import  AngularFirestoreModule  from 'angularfire2/firestore';
    
    @Component(
      selector: 'app-group',
      templateUrl: './group.component.html',
      styleUrls: ['./group.component.css']
    )
    export class GroupComponent implements OnInit 
    
      constructor(private groupService: GroupService, private firestore: AngularFirestore)  
    
      ngOnInit() 
        this.resetForm();
      
    
      resetForm(form ?: NgForm)
        if(form!= null)
          form.resetForm();
        this.groupService.formData = 
          $key : null,
          firstname: '',
          lastname: '',
          age: null
        
      
    
      onSubmit(form : NgForm)
        let data = form.value;
        // this.firestore.collection('groups').add(data);
        this.resetForm(form);
      
    
    

我得到的错误如下。

ERROR Error: StaticInjectorError(AppModule)[AngularFirestore -> InjectionToken angularfire2.app.options]: StaticInjectorError(Platform: core)[AngularFirestore -> InjectionToken angularfire2.app.options]: NullInjectorError: No provider for InjectionToken angularfire2.app.options! at NullInjector.push../node_modules/@angular/core/fesm5/core.js.NullInjector.get (core.js:8895) at resolveToken (core.js:9140) at tryResolveToken (core.js:9084) at StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js:8981) at resolveToken (core.js:9140) at tryResolveToken (core.js:9084) at StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js:8981) at resolveNgModuleDep (core.js:21217) at _createClass (core.js:21270) at _createProviderInstance (core.js:21234)

我点击了下面的链接,但没有运气。

Angular Fire Issue 1706

Angular Fire Issue 1416

No provider for InjectionToken angularfire2.app.options

下面是我的 app.module.ts 文件。

    import  BrowserModule  from '@angular/platform-browser';
    import  NgModule  from '@angular/core';
    import  AppComponent  from './app.component';
    import  environment  from '../environments/environment'
    import  AngularFireModule  from 'angularfire2';
    import  AngularFireDatabaseModule  from 'angularfire2/database';
    import  AngularFirestoreModule, AngularFirestore  from '@angular/fire/firestore';
    import  GroupsComponent  from './groups/groups.component';
    import  GroupComponent  from './groups/group/group.component';
    import  GroupListComponent  from './groups/group-list/group-list.component'
    import  GroupService  from './groups/shared/group.service';
    import  FormsModule  from '@angular/forms'
    
    
    @NgModule(
      declarations: [
        AppComponent,
        GroupsComponent,
        GroupComponent,
        GroupListComponent
      ],
      imports: [
        BrowserModule,
        AngularFirestoreModule,
        AngularFireDatabaseModule,
        AngularFireModule.initializeApp(environment.firebaseConfig),
        FormsModule
      ],
      providers: [AngularFirestore, GroupService],
      bootstrap: [AppComponent]
    )
    export class AppModule  

【问题讨论】:

请分享您要导入 Firebase 模块(包括 firestore)的 NgModule。 @AlexanderStaroselsky 上传文件 如果我必须做出有根据的猜测,您肯定需要从模块中的提供程序中删除 AngularFirestore。它不应该在那里添加。导入 AngularFirestoreModule 后,它就可以在整个应用程序中使用。从提供者那里删除它,如果有帮助,请告诉我。 如果我从提供程序中删除它,也会出现同样的错误。 【参考方案1】:

我想我知道解决我问题的答案。我只需要将以下语句导入到我创建的服务中,并且需要在服务的构造函数中创建对象。

import  AngularFirestore  from '@angular/fire/firestore';

【讨论】:

【参考方案2】:

错误很可能来自尝试将AngularFirestore 添加到providersAppModule。当AngularFirestoreModule 被导入到模块中时,AngularFirestore 变得可以注入。从providers 中删除AngularFirestore

import  BrowserModule  from '@angular/platform-browser';
import  NgModule  from '@angular/core';
import  AppComponent  from './app.component';
import  environment  from '../environments/environment'
import  GroupsComponent  from './groups/groups.component';
import  GroupComponent  from './groups/group/group.component';
import  GroupListComponent  from './groups/group-list/group-list.component'
import  GroupService  from './groups/shared/group.service';
import  FormsModule  from '@angular/forms';
import  AngularFireModule  from '@angular/fire';
import  AngularFirestoreModule  from '@angular/fire/firestore';
import  AngularFireDatabaseModule  from '@angular/fire/database';

@NgModule(
  declarations: [
    AppComponent,
    GroupsComponent,
    GroupComponent,
    GroupListComponent
  ],
  imports: [
    BrowserModule,
    AngularFireModule.initializeApp(environment.firebaseConfig),
    AngularFirestoreModule,
    AngularFireDatabaseModule,
    FormsModule
  ],
  providers: [GroupService],
  bootstrap: [AppComponent]
)
export class AppModule  

还请注意更新的导入路径。这些路径直接来自installation documentation。

还要确保您的依赖项中只有@angular/fire,而不是@angular/fire angularfire2。话虽如此,仅在您的导入中引用 @angular/fire 并从您的 package.json 和任何导入中删除 angularfire2

希望对您有所帮助!

【讨论】:

AngularFireDatabaseModule 的导入不正确。您能否尝试将该模块的导入更改为import AngularFireDatabaseModule from '@angular/fire/database';。如果没有该更改,我会收到一个错误,该错误甚至会阻止应用程序启动。请查看更新后的问题和更新后的 firebase 模块导入。 @Virus 您能否确认一下您的package.json 中的@angular/fire 版本?您还可以确认您的package.json 中没有@angular/fireangularfire2,您只有@angular/fire【参考方案3】:

所以解决办法是从

导入AngularFirestore

import AngularFirestore from '@angular/fire/firestore';

而不是import AngularFirestore from 'angularfire2/firestore';

希望对某人有所帮助

【讨论】:

以上是关于NullInjectorError:InjectionToken angularfire2.app.options 没有提供程序的主要内容,如果未能解决你的问题,请参考以下文章

NullInjectorError:没有提供 ElementRef

NullInjectorError:ReducerManager 没有提供程序

Angular 9:NullInjectorError:没有 CompilerFactory 的提供者

NullInjectorError:没有 HttpClient 的提供者

Angular:NullInjectorError:没有HttpClient的提供者[重复]

NullInjectorError:没有提供 DecimalPipe