Angular 如何在app.module.ts中以角度设置全局变量

Angular 如何在app.module.ts中以角度设置全局变量,angular,authentication,firebaseui,Angular,Authentication,Firebaseui,我正在为一个应用程序使用FirebaseUI,我想设置一种全局变量,用于保存用户是否是新用户 我在app.module.ts中设置了firebaseAuthConfig,与文档中一样,一切正常。我可以创建帐户,登录 我还可以查看用户是否是新用户 我的问题是我无法发送此数据。在应用程序的某些部分,如果用户是新用户,我希望能够显示不同的数据 我试图在提供程序中发送isNewUser值,但收到一个错误,表示对象未定义 import { NgModule } from '@angular/core';

我正在为一个应用程序使用FirebaseUI,我想设置一种全局变量,用于保存用户是否是新用户

我在app.module.ts中设置了firebaseAuthConfig,与文档中一样,一切正常。我可以创建帐户,登录

我还可以查看用户是否是新用户

我的问题是我无法发送此数据。在应用程序的某些部分,如果用户是新用户,我希望能够显示不同的数据

我试图在提供程序中发送isNewUser值,但收到一个错误,表示对象未定义

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';

import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { firebase, firebaseui, FirebaseUIModule } from 'firebaseui-angular';
import { environment } from '../environments/environment';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';

import { AngularFireModule } from '@angular/fire';
import { AngularFireAuthModule } from '@angular/fire/auth';
import { AuthService } from './services/auth.service';
import { AuthGuard } from './services/auth.guard';

let newUser;

const firebaseUiAuthConfig: firebaseui.auth.Config = {
  callbacks: {
    signInSuccessWithAuthResult: function (authResult) {
      this.newUser = authResult.additionalUserInfo.isNewUser;
      console.log("NEW USER", newUser);

      authResult.user.getIdToken().then(function (token) {
        console.log("TOKEN", token);
      })

      return true;
    }
  },
  signInSuccessUrl: "/tabs/discover",
  signInFlow: 'popup',
  signInOptions: [
    {
      requireDisplayName: true,
      provider: firebase.auth.EmailAuthProvider.PROVIDER_ID
    }
  ],
  tosUrl: '<your-tos-link>',
  privacyPolicyUrl: '<your-privacyPolicyUrl-link>',
  credentialHelper: firebaseui.auth.CredentialHelper.NONE
};


@NgModule({
  declarations: [AppComponent],
  entryComponents: [],
  imports: [
    BrowserModule,
    IonicModule.forRoot(),
    AppRoutingModule,
    AngularFireModule.initializeApp(environment.firebaseConfig),
    AngularFireAuthModule,
    FirebaseUIModule.forRoot(firebaseUiAuthConfig)
  ],
  providers: [
    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
    AuthService,
    AuthGuard,
    { provide: 'newUser', useValue: this.newUser }   // provide newUser to be used from other sections of the app
  ],
  bootstrap: [AppComponent],
})
export class AppModule { }
我在这里得到值(如果我使用字符串),尽管injector.get()已被弃用

但这对我没有帮助,因为我需要发送this.newUser值,而不是静态文本

signInSuccessWithAuthResult: function (authResult) {
          this.newUser = authResult.additionalUserInfo.isNewUser;
          console.log("NEW USER", newUser);
    
          authResult.user.getIdToken().then(function (token) {
            console.log("TOKEN", token);
          })
    
          return true;
        }
我希望你能帮忙

多谢各位

问候,,
AG

您可以使用存储全局变量。例如:

创建名为account.service.ts的服务组件,并存储名为
isUserNew的变量。确保根据用户是否为新用户更改此变量。
运行命令:
ng g s services/account
生成服务

account.service.ts

从'@angular/core'导入{Injectable};
@注射的({
提供于:“根”
})
公共出口账户服务{
public isUserNew=false;
}
在其他组件中,可以通过构造函数注入此服务来使用此服务

组件。ts:

构造函数(公共帐户:AccountService){

现在,您可以通过执行account.isUserNew

Hi来访问该组件中的
isUserNew
。我已经有一些服务了。我的问题是从app.module.ts发送变量数据,其中firebaseUi配置为。我只能在回调中看到用户是否是新用户。回调在app.module.ts中。
signInSuccessWithAuthResult: function (authResult) {
          this.newUser = authResult.additionalUserInfo.isNewUser;
          console.log("NEW USER", newUser);
    
          authResult.user.getIdToken().then(function (token) {
            console.log("TOKEN", token);
          })
    
          return true;
        }