未捕获(承诺):错误:没有 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 实现
Angular2“没有 t 的提供者!”和未捕获(承诺):错误:DI 错误
Ionic - 如何正确导入 ViewController? - 未捕获(承诺):错误:没有 ViewController 的提供者