Я хочу создать мутацию для состояния vuex, но заставить его динамически обновлять состояние - чтобы полезная нагрузка включала путь к объекту, из которого я хочу удалить элемент, и ключ.
- Отправка действия
deleteOption(path, key)
{ this.$store.dispatch('deleteOptionAction', {path, key}) }
- Совершение мутации
deleteOptionAction ({ commit }, payload) { commit('deleteOption', payload) }
- Мутация получает полезную нагрузку с path = 'state.xmlValues.Offers [0] .data.Pars' и key = 0.
deleteOption (state, payload) {
let stt = eval('state.' + payload.path)
Vue.delete(stt, payload.key)
// delete stt[payload.key] - works the same as Vue.delete
state.xmlValues.Offers[0].data.Pars = Object.assign({}, Object.values(stt))
}
Я пробовал использовать синтаксис состояния [payload.path], но это не сработало. Путь включает строку 'state.xmlValues.Offers [0] .data.Pars', поэтому для ее работы я использовал let stt = eval ('state.' + Payload.path). Но затем удалить элемент из состояния становится сложно: при использовании Vue.delete (stt, payload.key) - он удалит только ключ элемента, локально сохраненный в переменной stt, а не в состоянии.
Затем я переназначил объекты состояния с помощью stt (из которого нужный элемент уже удален), жестко закодировав путь - и этого я стараюсь избегать:
state.xmlValues.Offers[0].data.Pars = Object.assign({}, Object.values(stt))
Как передать путь к магазину, а затем использовать его для удаления объекта в состоянии без явного жесткого кодирования пути?
Что касается другого моего addOption для мутации, я также использовал динамический путь к объекту состояния - и он отлично работает при использовании динамического пути, оцениваемого в stt
addOption (state, payload) {
let stt = eval('state.' + payload.path)
Vue.set(stt, payload.key, payload.newEl)
}