angular - 我在以下组件中收到“无法设置未定义的属性‘变量’”
问题描述
该组件将呈现从 API 获取的值列表。我收到以下组件初始化问题:
Cannot set property 'hits' of undefined
显示-recipes.component.ts:
import { Component, OnInit, Input} from '@angular/core';
import { SearchRecipeService } from '../search-recipe.service';
import { RecipeGlobal } from '../pojos/RecipeGlobal';
@Component({
selector: 'app-display-recipes',
templateUrl: './display-recipes.component.html',
styleUrls: ['./display-recipes.component.css']
})
export class DisplayRecipesComponent implements OnInit {
@Input() calories: String;
@Input() recipe: String;
recipeResult: RecipeGlobal;
constructor(private searchRecipeService: SearchRecipeService) { }
ngOnInit() {
this.recipeResult.hits = [];
}
ngOnChanges(){
this.getRecipeInfo();
}
getRecipeInfo(){
this.searchRecipeService.getRecipeInfo().
subscribe(recipeResult => this.recipeResult = recipeResult);
}
}
显示-recipes.component.html
<p>display-recipes works!</p>
<div id='display_recipe' *ngFor="let recipe of recipeResult.hits">
{{recipe.label}}
</div>
RecipeGlobal.ts
export class RecipeGlobal{
q: String;
hits: Recipe[];
}
export class Recipe{
image: String;
calories: String;
label: String
}
我无法理解对象是如何在打字稿中初始化的。如果我在对象中声明一个非原始对象,我是否必须对其进行初始化?如果是这样,在这种情况下我应该如何初始化数组?
解决方案
由于这行代码,您的错误正在发生
ngOnInit() {
this.recipeResult.hits = [];
}
由于recipeResult变量尚未定义。
ngOnInit生命周期钩子会在从 api 获取数据之前被调用。
现在您必须事先定义recipeResult变量,例如在哪里声明它,将该行更改为此
recipeResult: RecipeGlobal = new RecipeGlobal();
谢谢。
推荐阅读
- email - 更改域的服务器,但电子邮件呢
- magento - Vue店面安装错误。无法建立店面 npm
- cluster-computing - Ignite visor 命令因 ClusterGroupEmptyCheckedException 出错:集群组为空
- git - 从强制推送中恢复 git 存储库
- python - 正则化逻辑回归成本函数 Log(1-p) = inf
- mongodb - 什么时候在mongodb中使用batchSize和limit
- apache-kafka - Kafka查询流
- python - 如何在 PyDev 中重置 python 解释器?
- python-3.x - 图恢复后精度不正确
- java - 如何扩展这个类