【问题标题】:Error: Uncaught (in promise): TypeError: Cannot read property错误:未捕获(承诺):TypeError:无法读取属性
【发布时间】:2020-06-23 15:05:38
【问题描述】:

我有这个代码,

 idTirada: string;
  tirada: Tirada;

  constructor(private tiradaService: TiradaService,
              private route: ActivatedRoute ) { 

    this.idTirada = this.route.snapshot.paramMap.get('id');

    this.tiradaService.getTirada( this.idTirada ) 
        .subscribe( resp => {
          this.tirada = resp;      
          console.log (resp)
        });              

  }

我使用 tiraradaService 读取 Firebase,它返回一个包含信息的数组

{arc: "-M9TuPty-oGAmgmnh0WL", camp: "massia", data: "2020-06-14T09:47:32.878Z", plens: "0", punts: "135", …}

我在 HTML 中显示它

<ion-card-header>
        <ion-card-subtitle>{{ tirada.arc }}</ion-card-subtitle>
    </ion-card-header>

但它给了我这个错误,如果我多次刷新信息它消失了,就好像我在数据之前加载了 HTML 并且不知道从哪里获取信息

core.js:6228 ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'arc' of undefined

【问题讨论】:

    标签: angular ionic-framework


    【解决方案1】:

    当 Angular 在 tirada 获得赋值之前渲染视图时,它会导致异常。 ?.tirada 为 null 或未定义时停止评估,这通常发生在异步获取数据时,例如从服务器获取可能需要相当长的时间。

    下次更改检测识别更改时,将重新评估绑定。当tirada 有一个值时,它将绑定tirada.arc

    所以在你的模板 HTML 中使用?.

    <ion-card-header>
        <ion-card-subtitle>{{ tirada?.arc }}</ion-card-subtitle>
    </ion-card-header>
    

    【讨论】:

    • 或者如果您使用的是自定义类,您可以在构造函数中创建该类的新实例:this.tirada = new Tirada();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    相关资源
    最近更新 更多