【问题标题】:How to resolve "Error: No provider for AngularFireDatabase"如何解决“错误:没有 AngularFireDatabase 的提供者”
【发布时间】:2018-05-22 13:48:33
【问题描述】:

我正在尝试使用 Angular 和 Firebase 构建一个原型聊天应用程序。

以下是我的路线:

export const appRoutes: Routes = [
    { path: 'signup', component: SignupFormComponent },
    { path: 'login', component: LoginFormComponent },
    { path: 'chat', component: ChatroomComponent },
    { path: '', redirectTo: '/login', pathMatch: 'full'},
];

但是当我路由到 /chat 时,我得到了 foll 错误。我不确定我在这里缺少什么来修复此错误。任何指导表示赞赏。

我查看了以下链接,但我已经包含了答案中所述的所有导入: No provider for AngularFireDatabase, AngularFireAuth

ERROR Error: Uncaught (in promise): Error: StaticInjectorError[AngularFireDatabase]: 
  StaticInjectorError[AngularFireDatabase]: 
    NullInjectorError: No provider for AngularFireDatabase!
Error: StaticInjectorError[AngularFireDatabase]: 
  StaticInjectorError[AngularFireDatabase]: 
    NullInjectorError: No provider for AngularFireDatabase!

下面是我的 chat-service.ts 文件:

import { Injectable } from '@angular/core';
import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database-deprecated'; 
import { AngularFireAuth } from 'angularfire2/auth';
import { Observable } from 'rxjs/Observable';
import { AuthService } from '../services/auth.service';
import * as firebase from 'firebase/app';

import { ChatMessage } from '../models/chat-message.model';

@Injectable()
export class ChatService {
  user: firebase.User;
  chatMessages: FirebaseListObservable<ChatMessage[]>;
  chatMessage: ChatMessage;
  userName: Observable<string>;

  constructor(
    private db: AngularFireDatabase,
    private afAuth: AngularFireAuth
    ) {
        /*this.afAuth.authState.subscribe(auth => {
          if (auth !== undefined && auth !== null) {
            this.user = auth; // the user object is only going to be set if we are authenticated
          }

        });*/
    }

   sendMessage(msg: string) { //per all the properties defined in the chat-message model
    const timestamp = this.getTimeStamp();
  //  const email = this.user.email;
    const email = "test@gmail.com";
    this.chatMessages = this.getMessages();
    this.chatMessages.push({
      message: msg,
      timeSent: timestamp,
      //userName: this.userName,
      userName: "test-user",
      email: email });

      console.log('called send');
  }

  getMessages(): FirebaseListObservable<ChatMessage[]> {
    // query to create our message feed binding
    return this.db.list('messages', {
      query: {
        limitToLast: 25,
        orderByKey: true
      }
    });
  }

  getTimeStamp() {
    const now = new Date();
    const date = now.getUTCFullYear() + '/' +
                 (now.getUTCMonth() + 1) + '/' +
                 now.getUTCDate();
    const time = now.getUTCHours() + ':' +
                 now.getUTCMinutes() + ':' +
                 now.getUTCSeconds();

    return (date + ' ' + time);
  }
}

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

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { RouterModule } from '@angular/router';
import { AngularFireModule } from 'angularfire2';
import { AngularFireDatabaseModule } from 'angularfire2/database';
import { AngularFireAuthModule } from 'angularfire2/auth';




import { AppComponent } from './app.component';
import { ChatFormComponent } from './chat-form/chat-form.component';
import { ChatroomComponent } from './chatroom/chatroom.component';
import { FeedComponent } from './feed/feed.component';
import { MessageComponent } from './message/message.component';
import { LoginFormComponent } from './login-form/login-form.component';
import { SignupFormComponent } from './signup-form/signup-form.component';
import { NavbarComponent } from './navbar/navbar.component';
import { UserListComponent } from './user-list/user-list.component';
import { UserItemComponent } from './user-item/user-item.component';


import { appRoutes } from '../routes';
import { ChatService } from './services/chat.service';
import { AuthService } from './services/auth.service';

import { environment } from '../environments/environment';


@NgModule({
  declarations: [
    AppComponent,
    ChatFormComponent,
    ChatroomComponent,
    FeedComponent,
    MessageComponent,
    LoginFormComponent,
    SignupFormComponent,
    NavbarComponent,
    UserListComponent,
    UserItemComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    RouterModule.forRoot(appRoutes),
    HttpModule,
    AngularFireModule,
    AngularFireDatabaseModule,
    AngularFireAuthModule,
    AngularFireModule.initializeApp(environment.firebase),


  ],
  providers: [AuthService, ChatService],
  bootstrap: [AppComponent]
})
export class AppModule { }

【问题讨论】:

    标签: angular firebase angularfire2


    【解决方案1】:

    添加 app.module.ts

    从 'angularfire2/database-deprecated' 导入 { AngularFireDatabase };

    import { BrowserModule } from '@angular/platform-browser';
    import { NgModule } from '@angular/core';
    import { FormsModule } from '@angular/forms';
    import { HttpModule } from '@angular/http';
    import { RouterModule } from '@angular/router';
    import { AngularFireModule } from 'angularfire2';
    import { AngularFireDatabaseModule } from 'angularfire2/database';
    import { AngularFireAuthModule } from 'angularfire2/auth';
    
    
    
    
    import { AppComponent } from './app.component';
    import { ChatFormComponent } from './chat-form/chat-form.component';
    import { ChatroomComponent } from './chatroom/chatroom.component';
    import { FeedComponent } from './feed/feed.component';
    import { MessageComponent } from './message/message.component';
    import { LoginFormComponent } from './login-form/login-form.component';
    import { SignupFormComponent } from './signup-form/signup-form.component';
    import { NavbarComponent } from './navbar/navbar.component';
    import { UserListComponent } from './user-list/user-list.component';
    import { UserItemComponent } from './user-item/user-item.component';
    
    
    import { appRoutes } from '../routes';
    import { ChatService } from './services/chat.service';
    import { AuthService } from './services/auth.service';
    
    import { environment } from '../environments/environment';
    
    
    @NgModule({
      declarations: [
        AppComponent,
        ChatFormComponent,
        ChatroomComponent,
        FeedComponent,
        MessageComponent,
        LoginFormComponent,
        SignupFormComponent,
        NavbarComponent,
        UserListComponent,
        UserItemComponent
      ],
      imports: [
        BrowserModule,
        FormsModule,
        RouterModule.forRoot(appRoutes),
        HttpModule,
        AngularFireModule,
        AngularFireDatabaseModule,
        AngularFireAuthModule,
        AngularFireModule.initializeApp(environment.firebase),
    
    
      ],
      providers: [AuthService, ChatService,AngularFireDatabase],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    

    【讨论】:

    • 谢谢。那行得通。但这是否意味着我的应用程序将来无法使用这种已弃用的路由方法
    【解决方案2】:

    请在您的聊天服务文件中从import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database-deprecated' 中删除-deprecated

    【讨论】:

      猜你喜欢
      • 2018-04-03
      • 2018-06-29
      • 2017-10-02
      • 2017-10-19
      • 2015-10-19
      • 2017-11-18
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多