Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 无法读取null的属性-属性加载速度不够快,无法进行绑定?_Angular_Firebase - Fatal编程技术网

Angular 无法读取null的属性-属性加载速度不够快,无法进行绑定?

Angular 无法读取null的属性-属性加载速度不够快,无法进行绑定?,angular,firebase,Angular,Firebase,在聊天室窗口中,“我的应用程序”使用身份验证服务中的currentUser.name向用户致意。 它按预期工作,但同时抛出5个重复错误: 错误类型错误:无法读取null的属性“name” 我不知道为什么应用程序会抛出这么多,但我知道原因是,在呈现DOM之前,属性的加载速度不够快 如何使DOM等待绑定加载 .ts文件: constructor(private auth: AuthService) {} ngOnInit() { this.auth.currentUser.su

在聊天室窗口中,“我的应用程序”使用身份验证服务中的currentUser.name向用户致意。 它按预期工作,但同时抛出5个重复错误:

错误类型错误:无法读取null的属性“name”

我不知道为什么应用程序会抛出这么多,但我知道原因是,在呈现DOM之前,属性的加载速度不够快

如何使DOM等待绑定加载

.ts文件:

  constructor(private auth: AuthService)
  {}

  ngOnInit() {
    this.auth.currentUser.subscribe(user => {
      this.currentUser = user;
    });
  }
html:

  <div class="select-room-message">
    Choose a Chat, {{this.currentUser.name}}
  </div>
我的身份验证服务:

  public currentUser: Observable <User | null>;


  constructor(
    private router: Router,
    private alertService: AlertService,
    private afAuth: AngularFireAuth,
    private db: AngularFirestore,
  ) {
    this.currentUser = this.afAuth.authState
    .pipe(switchMap((user) => {
      console.log('user ' + user);
     if (user) {
       return this.db.doc<User>(`users/${user.uid}`).valueChanges();
     } else {
       return of(null);
     }
   }));
 }

只需将您的HTML设置为:

<div class="select-room-message">
    Choose a Chat, {{currentUser?.name}}
</div>

这个?被称为安全导航运算符,在定义currentUser之前,它不会尝试读取属性名称。

由于currentUser是可观察的,因此您需要使用来对其更改作出反应。如果可以为空/未定义,则需要安全导航操作符指出

<div class="select-room-message">
    Choose a Chat, {{(currentUser | async)?.name}}
</div>