[英]How can I add items to my FormArray in angular?
I am trying to add some items to my FormArray but I am always get: core.js:6241 ERROR TypeError: Cannot read property 'push' of null.我正在尝试向我的 FormArray 添加一些项目,但我总是得到:core.js:6241 ERROR TypeError: Cannot read property 'push' of null。
I can add itens to the test array using my get answersFormArray() , but I am not able to add into the letter and text form array.我可以使用我的get answersFormArray() 将 itens添加到测试数组中,但我无法添加到字母和文本表单数组中。 I tried calling letterFormArray.push(value here) but gives me same error.
我尝试调用letterFormArray.push(value here)但给了我同样的错误。
this.userForm = this.fb.group({
fname: ['', [Validators.required]],
lname: ['', [Validators.required]],
email: ['', [Validators.email, Validators.required]],
facility: ['', [Validators.required]],
testCode: ['', [Validators.required]],
date: [''],
test: this.fb.group({
name: [''],
id: [''],
position: [''],
scored: [''],
wrong: [''],
duration: [''],
/* answers: this.fb.array([
this.fb.group({
num:'',
letter: this.fb.array([]),
text: this.fb.array([]),
userLetter: this.fb.array([]),
userText: this.fb.array([]),
})
])
}), */
answers: this.fb.group({
user: this.fb.array([
this.fb.group({
num:'',
letter: this.fb.array([]),
text: this.fb.array([]),
})
]),
teste: this.fb.array([
this.fb.group({
num:'',
letter: this.fb.array([]),
text: this.fb.array([]),
})])
})
})
})
I am trying to add itens to letter and text FormArray.我正在尝试将 itens 添加到字母和文本FormArray。
get answersFormArray() {
//return this.userForm.get('test.answers') as FormArray //Option 1
return this.userForm.get('test.answers.teste') as FormArray
}
get letterFormArray() {
return this.userForm.get('test.answers.teste.letter') as FormArray;
}
get textFormArray() {
return this.userForm.get('test.answers.teste.text') as FormArray;
}
getTestCorrectAnswers() {
for(let i = 0; i < this.current_quest.length; i++) {
const answ = this.fb.group({
numb: i+1,
letter: this.fb.array([]),
text: this.fb.array([])
})
for(let z = 0; z < this.current_quest[i].alternatives.length; z++) {
const alter = this.fb.control("");
//objective
if(this.current_quest[i].type === "objective") {
if(this.current_quest[i].single_or_multi === "single") {
if(this.current_quest[i].alternatives[z].correct == true) {
this.textFormArray.push(this.fb.control(this.current_quest[i].alternatives[z].text));
this.letterFormArray.push(this.fb.control(this.current_quest[i].alternatives[z].letter));
console.log("Objetiva com uma única alternativa --> " + this.current_quest[i].alternatives[z].text);
}
}
else {
if(this.current_quest[i].alternatives[z].correct == true) {
console.log("Objetiva com várias alternativas --> " + this.current_quest[i].alternatives[z].text);
}
}
}
//Subjective
else {
if(this.current_quest[i].alternatives.length >= 1) {
console.log("Subjetiva com chave de resposta --> " + this.current_quest[i].alternatives[z].text);
}
else if(!this.current_quest[i].alternatives.length){
console.log("Subjetiva sem chave de resposta --> ");
}
}
}
this.answersFormArray.push(answ);
}
}
This is an example of the object I am creating...这是我正在创建的 object 的示例...
teste: [
{
"numb": 1,
"letter": ["a", "b"],
"text": ["red", "yellow"]
},
{
"numb": 2,
"letter": ["a"],
"text": ["black"]
}
]
letter
and text
are FormArray nested into another FormArray. letter
和text
是 FormArray 嵌套到另一个 FormArray 中的。 As a FormArray is more basically an array, you need to target the index of the FromGroup populated into it.由于 FormArray 基本上是一个数组,因此您需要定位填充到其中的 FromGroup 的索引。
get letterFormArray(index: number) {
return this.userForm.get('test.answers.teste[index].letter') as FormArray;
}
André, you generally has安德烈,你通常有
get users()
{
return this.userForm.get('test.answer.users') as FormArray
}
get teste()
{
return this.userForm.get('test.answer.teste') as FormArray
}
To reach an element of the FormArray you need an "index", and you can not use a getter, see that is getLetter together, NOT get Letter, see also how we use the getters defined before要到达 FormArray 的元素,您需要一个“索引”,并且您不能使用 getter,请参阅 getLetter 一起,而不是获取 Letter,另请参阅我们如何使用之前定义的 getter
getLetter(index){
return this.answer.at(index).letter as FormArray
}
getTest(index){
return this.answer.at(index).test as FormArray
}
Now you can do现在你可以做
this.getLetter(index.push(...);
//and
this.getTest(index.push(...);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.