json vue.js

¿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);