¿Cómo cambiar el valor de JSON anidado con Vue $ set?
vue.js (1)
[
{
"id": 1,
"question": "Top Level question",
"answers": [
{"id" : 1, "isSelected" : false},
{"id" : 2, "isSelected" : true},
{"id" : 3, "isSelected" : false},
{"id" : 4, "isSelected" : false},
{"id" : 5, "isSelected" : false},
{"id" : 6, "isSelected" : false}
],
"MaxAllowedChoice" : 1,
"isEnabled" : true,
"NowSelected" : 0
}
]
Escribí el siguiente ciclo:
for (let question of this.questions) {
//console.log(question.answers); // array of answers
for(let answer of question.answers) {
//this.$set(''answer.isSelected'', true);
console.log(''Before: '', answer.isSelected);
// this.$set(''answer.isSelected'', true); //warning: You are setting a non-existent path "answer.isSelected"
this.$set(''questions.answers.answer.isSelected'', true); // so look like I should to do like this to change value
// this.$set(''questions.answers.answer.isSelected'', true); //I can''t understand how to write it''s correctly... like this or above.
console.log(''After: '', answer.isSelected);
}
}
Necesito cambiar todos los valores a verdadero (o es posible cambiar verdadero <-> falso y viceversa). No puedo entender cómo alcanzar la clave necesaria. this.$set(''answer.isSelected'', true);
produce una advertencia, y parece que no puede entender qué tecla debería cambiar.
this.$set(''questions.answers.answer.isSelected'', true);
no produzca waring, pero no estoy seguro de que sea un valor de cambio en el lugar correcto. Porque veo en consola:
Antes: falso
Después: falso
Antes: cierto
Después: cierto
Pero todos los valores en mi código deben establecerse en verdadero.
Si entiendo correctamente, no deberías necesitar usar this.$set()
. Debería poder establecer la propiedad directamente en la respuesta actual en cada iteración:
for(let question of this.questions) {
for(let answer of question.answers) {
answer.isSelected = true;
}
}
Si realmente necesita usar $set()
(lo que podría tener sentido en algunos escenarios), deberá usar los índices de matriz en el recorrido de tecla:
this.$set(''questions[0].answers[0].isSelected'', true);