【问题标题】:Angularfire v6 undefined AngularFireStore in PromisePromise 中的 Angularfire v6 未定义 AngularFireStore
【发布时间】:2020-06-27 13:57:22
【问题描述】:

我的登录组件让用户成功登录,但我想在 FireStore 中为该用户创建一个文档。

在这种情况下,我一直在加载 AngularFirestore afs 时遇到问题。

zone-evergreen.js:659 Unhandled Promise rejection: Cannot read property 'afs' of undefined ; Zone: <root> ; Task: Promise.then ; Value: TypeError: Cannot read property 'afs' of undefined
    at onLoginFulfiled (login.component.ts:32)
    at ZoneDelegate.invoke (zone-evergreen.js:365)
    at Zone.run (zone-evergreen.js:124)
    at zone-evergreen.js:851
    at ZoneDelegate.invokeTask (zone-evergreen.js:400)

这是我的登录组件代码。

import { Component, OnInit } from '@angular/core';
import { LoginRequest } from './loginRequest';
import { AngularFireAuth } from '@angular/fire/auth';
import { AngularFirestore, AngularFirestoreDocument } from '@angular/fire/firestore';
import { auth } from 'firebase/app';
import 'firebase/firestore';

export interface Item { uid: string; }

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit {

  loginRequest: LoginRequest = { password: '', login: ''};
  constructor(public fireAuth: AngularFireAuth, public afs: AngularFirestore) { }

  ngOnInit(): void {
  }

  login(): void {
    console.log(this.loginRequest);
    this.fireAuth.signInWithEmailAndPassword(this.loginRequest.login, this.loginRequest.password)
      .then(this.onLoginFulfiled, this.onLoginRejected);
  }

  onLoginFulfiled(credential: auth.UserCredential): void {
    console.log('Fulfilled: ' + credential);
    const uid = credential.user.uid;
    const userDocument = this.afs.doc<Item>(`system-users/${uid}`);
    userDocument.update({uid});
  }

  onLoginRejected(reason: any): void {
    console.log('Rejected: ' + reason);
  }
}

还有我的app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';
import { AngularFireModule } from '@angular/fire';
import { AngularFireAnalyticsModule } from '@angular/fire/analytics';
import { AngularFirestoreModule } from '@angular/fire/firestore';
import { environment } from '../environments/environment';
import { LoginComponent } from './login/login.component';

@NgModule({
  declarations: [
    AppComponent,
    PageNotFoundComponent,
    LoginComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    AngularFireModule.initializeApp(environment.firebase),
    AngularFireAnalyticsModule,
    AngularFirestoreModule,
    AppRoutingModule,
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

【问题讨论】:

    标签: javascript angular firebase google-cloud-firestore angularfire


    【解决方案1】:

    尝试替换

    .then(this.onLoginFulfiled, this.onLoginRejected);
    

    .then(() => this.onLoginFulfiled(), () => this.onLoginRejected());
    

    【讨论】:

    • 呃——太疯狂了。你能帮我理解为什么会这样吗!?我对角度比较陌生,我也想更准确地更新问题。
    • login(): void { this.fireAuth.signInWithEmailAndPassword(this.loginRequest.login, this.loginRequest.password) .then( (credential) => this.onLoginFulfiled(credential), (原因:任何)=> this.onLoginRejected(原因)); }
    • 这就是它的样子,我遇到了一个不同的问题,但我的 Firestore 设置现在可以解决了。
    • @EvanAnger 我认为这与 Angular 无关。这是关于this 在函数中的工作方式。对于=&gt;this 是您的LoginComponent,它具有afs 属性。看到这个问题stackoverflow.com/q/24900875/6002078
    • 好的 - 我应该说......我不仅是 Angular 的新手,而且是 JS/TS/etc 的新手。哈哈。感谢您的链接和建议。我又回来了,开始这个有趣的旅程。
    猜你喜欢
    • 2017-12-12
    • 2015-05-07
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 2019-09-03
    相关资源
    最近更新 更多