【问题标题】:Displaying a Current User (Angular and Firebase)显示当前用户(Angular 和 Firebase)
【发布时间】:2021-12-04 23:13:59
【问题描述】:

以下是我的代码行,我没有错误,但当前用户名未显示在浏览器上,下拉菜单下的页面未显示在浏览器上。

我创建了一个导航栏,它有一个下拉列表,仅显示给登录用户,这是在我使用 Google 提供程序实现登录之前和之后显示的。登录也可以完美运行,但是在使用 *ngIf 和异步管道来个性化登录后,我看不到下拉菜单,登录后什么也没有发生。请参阅下面的代码。

Navbar.component.ts

import { Component, OnInit } from '@angular/core';
import { AngularFireAuth } from '@angular/fire/compat/auth';
import firebase from 'firebase/compat/app';
import { Observable } from 'rxjs/Observable'

@Component({
  selector: 'bs-navbar',
  templateUrl: './bs-navbar.component.html',
  styleUrls: ['./bs-navbar.component.css']
})
export class BsNavbarComponent  {
  currentUser$: Observable<firebase.User> | undefined;
  currentUser: any;

  constructor(private afAuth: AngularFireAuth) { 
    this.currentUser = afAuth.authState;
    }
  

  logout() {
    this.afAuth.signOut(); 
  }

}

Login.component.ts

import { Component, OnInit } from '@angular/core';
import { AngularFireAuth} from '@angular/fire/compat/auth';
import firebase from 'firebase/compat/app';


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

  constructor(private afAuth: AngularFireAuth) {  
    
  }


  login() {

      this.afAuth.signInWithRedirect( new firebase.auth.GoogleAuthProvider());
  }

}

navbar.component.html

<nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4">
    <div class="container-fluid">
     <a class="navbar-brand" routerLink="/">HM</a>
       <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
      <div class="collapse navbar-collapse" id="navbarCollapse">
        <ul class="navbar-nav me-auto mb-2 mb-md-0">
          <li class="nav-item">
     <a class="nav-link" routerLink="/wishlists">Wishlists</a>
          </li>
          <ng-template  #anonymousUser>
            <li class="nav-item">
                <a class="nav-link" routerLink="/login">Login</a>
              </li>
          </ng-template>
            <li ngbDropdown placement *ngIf="currentUser$ | async as user; else anonymousUser" class="nav-item dropdown">
                <a ngbDropdownToggle class="nav-link dropdown toggle" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">{{ user.displayName }}</a> 
                <div ngbDropdownMenu class="dropdown-menu" aria-labelledby="dropdown01">
                    <a ngbDropdownItem class="dropdown-item" routerLink="/admin/houses">My Houses</a>
                    <a ngbDropdownItem class="dropdown-item" (click)="logout()"> Log out</a>
                </div>
            </li>
        </ul>
        <form class="d-flex">
          <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
          <button class="btn btn-outline-success" type="submit">Search</button>
        </form>
      </div>
    </div>
  </nav>

【问题讨论】:

  • 在 navbar.component.ts 中,您没有为 currentUser$ 赋值。相反,您为 currentUser 分配了一个值,我不明白它的用途。
  • 这是一个疏忽,我刚刚更正了,我是使用 Firebase 的新手,我仍然没有编译错误,但下拉列表没有显示

标签: angular firebase bootstrap-4


【解决方案1】:

在你的 navbar.component.ts
删除行 currentUser$:Observable |未定义;
并代替 currentUser:any 使用这个

currentUser:Observable<firebase.User | null>

以及在 html 文件中将 currentUser$ 设为 *ngIf
中的 currentUser
试试这个然后告诉我
这应该工作

【讨论】:

    猜你喜欢
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多