0

Angular 8,Django 3。我Restaurant在视图中显示一个对象RestaurantViewRestaurantView获取方法Restaurant:_ngOnInit

    restaurant: Restaurant
    id: string 

    getrestaurantdetail(id):void {
      this.restaurantservice.restaurantdetail(id).subscribe(restaurant => this.restaurant = restaurant)
    }


  ngOnInit() {
    this.id = this.route.snapshot.paramMap.get('id')
    this.getrestaurantdetail(this.id)
  }

}

然后显示在 html 文件<h1>{{restaurant.name}}</h1>中。如果我没有将 Elvis 运算符放在 html 文件中,因为<h1>{{restaurant?.name}}</h1>视图正确显示,但我收到控制台错误property "name" not defined。我不明白如果在初始化RestaurantView时返回一个Restaurant对象,为什么我会得到这个空错误。

4

1 回答 1

0

这是因为返回的请求restaurant是异步的。因此,restaurant当组件第一次渲染时,将是未定义的,直到从restaurantdetail方法返回的 observable。

elvis算子,也称为安全导航算子

防止属性路径中出现空值和未定义值。在这里,如果 item 为 null,它可以防止视图呈现失败。

因此,您的 HTML 模板需要它:

<h1>{{restaurant?.name}}</h1>

这样做的替代方法是使用ngIf结构指令来检查是否restaurant为空或未定义。

<h1 *ngIf="restaurant">{{restaurant.name}}</h1>
于 2020-01-27T19:00:45.987 回答