【问题标题】:Cannot get data from object in Angualr无法从Angular中的对象获取数据
【发布时间】:2021-04-06 11:35:04
【问题描述】:

我目前正在使用 Angular、NgRx 和 angular fire 编写应用程序。我已经设法获取数据并且可以控制台记录返回对象的数据,但是,我无法访问对象数据

我将数据存储在用户模型中


    export interface User {
        userID: string;
        email: string;
        firstname: string;
        lastname: string;
    }

然后在返回数据的组件中,我创建一个可观察对象并在 ngOnInit 中填充它


    currentUser$:Observable<User>;

    ...
    
    ngOnInit(): void {
     
        this.currentUser$ = this.store.select(fromRoot.getUserDetails);   
        
        this.currentUser$.subscribe(user => {
          console.log(user)
        })   
       
      }

这会在控制台中返回


    {userID: "xjZ1aqcPFDOAMappYHgMqcYjQie2", email: "jonathansiberry@gmail.com", firstname: "Jonathan", lastname: "Siberry"}
    email: "jonathansiberry@gmail.com"
    firstname: "Jonathan"
    lastname: "Siberry"
    userID: "xjZ1aqcPFDOAMappYHgMqcYjQie2"

但是当它改为

    console.log(user.firstname)

我看到了错误


    core.js:6162 ERROR TypeError: Cannot read property 'firstname' of null
        at SafeSubscriber._next (header.component.ts:37)
        at SafeSubscriber.__tryOrUnsub (Subscriber.js:183)
        at SafeSubscriber.next (Subscriber.js:122)
        at Subscriber._next (Subscriber.js:72)
        at Subscriber.next (Subscriber.js:49)
        at DistinctUntilChangedSubscriber._next (distinctUntilChanged.js:50)
        at DistinctUntilChangedSubscriber.next (Subscriber.js:49)
        at MapSubscriber._next (map.js:35)
        at MapSubscriber.next (Subscriber.js:49)
        at MapSubscriber._next (map.js:35)

我尝试使用 JSON 进行解析,但由于订阅中的用户是 User 类型,因此无法转换为字符串

为什么我不能访问用户对象中的值?

【问题讨论】:

    标签: angularjs ngrx


    【解决方案1】:

    当您在控制台中打印整个用户时,您是否看到首先打印了一个空值?如果是这样,这意味着您的商店首先发出一个空用户,因此您可能需要执行空检查或使用可选的链接运算符:

    console.log(user?.firstname)
    

    【讨论】:

      【解决方案2】:

      this.currentUser$.subscribe(user => { 控制台日志(用户) })

      在此尝试使用类似于以下代码的 any:

      this.currentUser$.subscribe(user: any => {
         console.log(user);
      }) 
      

      另外,尝试将返回的值分配给另一个变量,然后尝试访问它。

      【讨论】:

        【解决方案3】:

        谢谢,似乎值正在设置,但不是在我输出到控制台的那一刻,即输出到控制台返回 null,但在 HTML 文件中引用变量可以表明时间问题(这是一个异步函数,我猜)

        因此,我正在完成请求。谢谢大家的帮助

        【讨论】:

          猜你喜欢
          • 2014-09-17
          • 2021-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-02
          • 1970-01-01
          相关资源
          最近更新 更多