Я хочу создать мутацию для состояния vuex, но заставляя его динамически обновлять состояние - чтобы полезная нагрузка включала путь к объекту, из которого я хочу удалить элемент, и ключ.
- Отправка действия
deleteOption(path, key)
{ this.$store.dispatch('deleteOptionAction', {path, key}) }
Передача мутации
deleteOptionAction ({ commit }, payload) { commit('deleteOption', payload) }
Мутация получает полезную нагрузку с path = 'state.xmlValues.Offers [0] .data.Pars' и ключом = 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)
}