I am trying to add information to an object but I am getting an error (saying that property 'push' of undefined).
/*This is my object model:*/
export class Students {
city: string;
company: string;
email: string;
firstName: string;
grades: [];
id: string;
lastName: string;
pic: string;
skill: string;
open: boolean;
tags: string[];
}
已过滤学生:学生[];
/*I have a form that gets the information user is typing.
f has the information and index_ has the index of the object.*/
sendForm(f:NgForm,index_:数字){
if (f.invalid) {
return
}
else {
/*storing the value of user input into "str variable"*/
var str = f.value.inputTag;
/*Here is where the error happens. I am trying to store information into "tags" property of a specific student.*/
this.filteredStudents[index_].tags.push(str);
}
f.reset();
}
如果您有任何想法,请帮助我! 如果您有任何想法,请帮助我! 如果您有任何想法,请帮助我!
此错误显示在Google chrome的控制台中。
答案 0 :(得分:1)
我认为是因为在任何地方都没有定义this.filteredStudents,所以您需要将其声明为带有键“ tags”的哈希,并将值声明为控制器顶部某个位置的列表。
this.filteredStudents = {
tags: []
}
那应该让你做
this.filteredStudents[tags].push('whatever').
在索引末尾加上_也有点奇怪。我已经看到内部函数的名称以_开头,而在函数参数末尾还没有使用过它。
答案 1 :(得分:1)
您应该更新此内容:
export class Students {
...
tags = new Array<string>();
}
因为标签:string []这没有定义类型。
您必须记住,Angular Style Guide当前实际上是在说:“考虑对数据模型使用接口。”
在这种情况下,您可以执行以下操作:
export interface Students {
...
tags: string[];
}
您可以这样使用它,例如:
test: Students[] = new Array<Students>();
const a = { city: 'My City', ..., tags: new Array<string>() };
this.test.push( a );
this.test[0].tags.push('Any string');
答案 2 :(得分:0)
这是一种无需修改类即可实现的方法
(this.filteredStudents[index_].tags = this.filteredStudents[index_].tags || []).push(str)
或者您可以初始化数组标签
export class Students {
...
skill: string;
open: boolean;
tags = new Array<string>();
}
然后
this.filteredStudents[index_].tags.push(str)