未捕获(承诺):错误:没有 AngularFireAuth 的提供者

Posted

技术标签:

【中文标题】未捕获(承诺):错误:没有 AngularFireAuth 的提供者【英文标题】:Uncaught (in promise): Error: No provider for AngularFireAuth 【发布时间】:2017-10-11 05:33:48 【问题描述】:

我们尝试使用 (Firebase/ionic2/angularjs2) 使用谷歌身份验证登录。我们的代码

 import  Component  from '@angular/core';
import  NavController  from 'ionic-angular';
import  Observable  from 'rxjs/Observable';
import  AngularFireAuth  from 'angularfire2/auth';
import * as firebase from 'firebase/app';

@Component(
  selector: 'page-home',
  templateUrl: 'home.html'
)
export class HomePage 
   user: Observable<firebase.User>;
  constructor(public navCtrl: NavController,public afAuth: AngularFireAuth) 
    this.user = afAuth.authState;
  
  login() 
    this.afAuth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider());
  

  logout() 
    this.afAuth.auth.signOut();
  

但我们遇到了错误:

Error: Uncaught (in promise): Error: No provider for AngularFireAuth!
Error: No provider for AngularFireAuth!

请指导我们代码中的工作原理。

【问题讨论】:

尝试将AngularFireAuth 也添加到providers 数组中,在app.component.ts 中导入它。 您是否将其添加到您的NgModule imports 数组下? 你解决了吗?我有点卡在同一个地方 将 - import AngularFireAuthModule from 'angularfire2/auth'; 添加到 app.module 并导入。 【参考方案1】:

澄清@rmalviya 的建议,我假设您当前使用的是 Ionic 版本 3.x.x,对于此版本,您有两种方法可以导入本机插件并为插件添加相应的提供程序。

1) 您可以在当前页面的打字稿文件中添加提供程序。像这样:

  import  AngularFireAuth  from 'angularfire2/auth';

  ...

  @Component(
    selector: 'page-home',
    templateUrl: 'home.html',
    providers: [AngularFireAuth]
  )

2) 第二种方法,您可以将其导入 app.modules.ts 并将插件添加到提供程序中

 import  AngularFireAuth  from 'angularfire2/auth';

 ...

 providers: [
   StatusBar,
   SplashScreen,
   provide: ErrorHandler, useClass: IonicErrorHandler,
   AngularFireAuth
 ]

【讨论】:

【参考方案2】:

resolve here https://github.com/iglewski/Annotator/issues/3

app.component.spec.ts :

import  FirebaseApp, FirebaseAppConfig, AngularFireModule  from 'angularfire2';
import  AngularFireAuth, AngularFireAuthModule  from 'angularfire2/auth';
import  AngularFireDatabaseModule  from 'angularfire2/database';
import * as firebase from 'firebase/app';
import  firebaseConfig  from './app.module';
describe('AppComponent', () =>  
  beforeEach(async(() => 
    TestBed.configureTestingModule(
      declarations: [
        AppComponent
      ],
      imports: [
        AngularFireModule.initializeApp(firebaseConfig), //ajout
        AngularFireAuthModule, //ajout
        AngularFireDatabaseModule //ajout
      ],
    ).compileComponents();

  )); 

【讨论】:

【参考方案3】:

如果您使用的是IonicPageModule 系统,则需要在您的app.module.ts 中导入AngularFireAuth 并在您的providers 数组中的page.module.ts 中导入。

app.module.ts:

@NgModule(
... 
 providers: [AngularFireAuth]
... 

page.module.ts:

@NgModule(
  declarations: [
    SignupPage,
  ],
  imports: [
    IonicPageModule.forChild(SignupPage)
  ],
  exports: [
    SignupPage
  ],
  providers: [
    AngularFireAuth
  ]
)

【讨论】:

【参考方案4】:

我遇到了同样的问题,但我设法通过在我的核心模块中添加以下几行来解决这个问题。

CoreModule 包含将用于实例化您的应用并加载一些核心功能的代码。

import  NgModule  from '@angular/core';
import  CommonModule  from '@angular/common';

/* 3e. Import the angularfire2 thingy. */
**import AngularFirestoreModule  from 'angularfire2/firestore';
import  AngularFireStorageModule  from 'angularfire2/storage';
import  AngularFireAuthModule  from 'angularfire2/auth';**

import  AuthModule  from '../auth/auth.module';
import  AuthService  from '../core/auth.service';

@NgModule(
  declarations: [],
  imports: [
    CommonModule,

    /* To allow the db to talk to the form. */
    **AuthModule,
    AngularFireAuthModule,
    AngularFireStorageModule,
    AngularFirestoreModule,**
  ],
  exports: [],
  providers: [
    AuthService,
  ]
)
export class CoreModule  

【讨论】:

以上是关于未捕获(承诺):错误:没有 AngularFireAuth 的提供者的主要内容,如果未能解决你的问题,请参考以下文章

ERROR 错误:未捕获(承诺中):MyPlugin 没有 Web 实现

离子 - 错误:未捕获(承诺):找不到removeView

Angular2“没有 t 的提供者!”和未捕获(承诺):错误:DI 错误

Ionic - 如何正确导入 ViewController? - 未捕获(承诺):错误:没有 ViewController 的提供者

未捕获(承诺)类型错误:尝试打开窗口时出现问题

未捕获(在承诺中)错误:提供的权重数据没有目标变量:block1_conv1_2 / kernel