¿Cómo generar objetos anidados faltantes (como bar, a, b y c) cuando se usa Vue.$set de la siguiente manera?

export const mutations = {
  UPDATE(state, payload) {
    this._vm.$set(state.foo.bar.a.b.c, payload.key, payload.value)
  }
}

En lugar de state.foo.bar.a.b.c, en realidad estoy usando _.get(state, payload.path).

0
DevonDahon 28 oct. 2020 a las 16:21

1 respuesta

La mejor respuesta

El código que ha incluido debería funcionar. ¿Estás obteniendo un error?

EDITAR:

Bien, creo que lo entiendo ahora, basándome en tu ejemplo, p. Ej. Es posible que b aún no exista y, de ser así, debería crearse.

No creo que Vue.$set haga esto automáticamente, pero podrías usar una solución personalizada como esta, que debería crear cualquier objeto que falte a lo largo de la cadena de payload.path:

      let objectLevels = payload.path.split('.');
      const propToChange = objectLevels.reduce((res, level) => {
        if (!res[level]) this.$set(res, level, {});
        return res[level];
      }, state);
      this.$set(propToChange, payload.key, payload.value);
1
Hannah 28 oct. 2020 a las 14:30