Я только начинаю размахивать модулями функций, и у меня AngularFire2 работает над приложением только с основным модулем приложения. Теперь я пытаюсь разбить приложение на отдельные функциональные модули, одним из которых является модуль аутентификации, а один - модуль Customer.Feature Modules & Firebase Service
В настоящее время вы видите сообщение "error_handler.js: 47 ORIGINAL EXCEPTION: No Firebase App '[DEFAULT]' было создано - вызвать Firebase App.initializeApp()." Однако я инициализирую это на корневом уровне, поэтому не совсем понимаю, почему это не работает.
App.Module
import { NgModule } from '@angular/core';
import { HttpModule } from '@angular/http';
import { BrowserModule } from '@angular/platform-browser';
import { ReactiveFormsModule } from '@angular/forms';
import * as firebase from 'firebase';
import { AngularFireModule } from 'angularfire2';
import { AppComponent } from './app.component';
import { CustomerModule } from "./customer/customer.module";
import { AuthenticationModule } from "./authentication/authentication.module";
import { AuthenticationService } from "./authentication/authentication.service";
const firebaseConfig = {
apiKey: "",
authDomain: "",
databaseURL: "",
storageBucket: ""
}
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
ReactiveFormsModule,
HttpModule,
AngularFireModule.initializeApp(firebaseConfig),
CustomerModule,
AuthenticationModule
],
providers: [AuthenticationService],
bootstrap: [AppComponent]
})
export class AppModule { }
Модуль клиента
import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common";
import { ReactiveFormsModule } from "@angular/forms";
import { customerRouting } from "./customer.routing";
import { CustomerComponent } from "./customer.component";
import { RegistrationComponent } from "./registration/registration.component";
@NgModule({
declarations: [CustomerComponent, RegistrationComponent],
imports: [CommonModule, ReactiveFormsModule, customerRouting]
})
export class CustomerModule {}
Модуль аутентификации
import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common";
@NgModule({
declarations: [],
imports: [CommonModule]
})
export class AuthenticationModule {}
регистрации компонентов
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators, FormControl } from "@angular/forms";
import { AuthenticationService } from "../../authentication/authentication.service";
@Component({
selector: 'mj-registration',
templateUrl: './registration.component.html',
styleUrls: ['./registration.component.css']
})
export class RegistrationComponent implements OnInit {
myForm: FormGroup;
error = false;
errorMessage = '';
constructor(private fb: FormBuilder, private authService: AuthenticationService) { }
ngOnInit() {
this.myForm = this.fb.group({
organisation: ['', Validators.required],
email: ['', Validators.compose([
Validators.required,
this.isEmail
])],
password: ['', Validators.required],
confirmPassword: ['', Validators.compose([
Validators.required,
this.isEqualPassword.bind(this)
])],
});
}
onSignup() {
this.authService.signupUser(this.myForm.value);
}
isEmail(control: FormControl): { [s: string]: boolean } {
if (!control.value.match(/^\[email protected][a-zA-Z_]+?\.[a-zA-Z]{2,3}$/)) {
return { noEmail: true };
}
}
isEqualPassword(control: FormControl): { [s: string]: boolean } {
if (!this.myForm) {
return { passwordsNotMatch: true };
}
if (control.value !== this.myForm.controls['password'].value) {
return { passwordsNotMatch: true };
}
}
}
Authentication Service
import { Injectable } from "@angular/core";
import { User } from "./user-model";
import { Router } from "@angular/router";
declare var firebase: any;
@Injectable()
export class AuthenticationService {
constructor(
private router: Router) {
}
signupUser(user: User) {
//Create new user based on the email and password provided
firebase.auth().createUserWithEmailAndPassword(user.email, user.password)
.catch(function (error) {
console.log(error);
});
}
}