
ISec
13.05.2018
21:27:29

Victor
13.05.2018
21:27:38
Ну хорошо, а вот так?
https://github.com/maoberlehner/vuex-map-fields
export default {
computed: {
...mapFields([
'form.firstName',
'form.lastName',
'form.message',
// ...
]),
},
};

Google

Victor
13.05.2018
21:28:17
Куда уж проще???
Пост в поддержку последней либы: https://markus.oberlehner.net/blog/form-fields-two-way-data-binding-and-vuex/

Dmitry
13.05.2018
21:28:43
AI пожалуйста выкати на гитхаб, который код пишет ?

ISec
13.05.2018
21:29:16
Короче, в итоге написал обертку:
// ~/src/utils/vuex_setter.js
import store from '../store';
const getNamespace = (namespace) => {
return (namespace) ? namespace + '/' : '';
}
export const mapSetter = (namespace, state = {}) => (
Object.keys(state).reduce((acc, stateName) => {
acc[stateName] = {
get: () => store.state[namespace][stateName],
};
if (state[stateName] !== null) {
acc[stateName].set = (val) => store.commit(
getNamespace(namespace)+state[stateName], val
);
}
return acc;
}, {})
);
В компоненте:
import { mapSetter } from './utils/vuex_setter';
...
computed: {
...mapSetter('main', {
inn: 'setInn',
certificates: 'fillSertificates',
}),
}
В хранилище ничего модифицировать не пришлось, там все по докам.


Ivan
13.05.2018
22:01:24
а для чего мапить каждое отдельное поле?
почему нельзя использовать 1 сеттер ,в котором передавать имя поле которе хочется изменить?
которые в setInn и fillSertificates?
просто логики в гетерах и сеттерах нет как я вижу из кода обертки

ISec
13.05.2018
22:03:29

Ivan
13.05.2018
22:04:07
я хочу понять задачу, для чего на каждый параметр свою мутацию делать

ISec
13.05.2018
22:04:46
Ну смотри, есть 20 инпутов

Ivan
13.05.2018
22:04:52
я раньше делал так же, но отказался изза кол-ва кода

ISec
13.05.2018
22:05:41
значение каждого инпута хранится в Vuex, потому что используется и после разрушения компонента

Google

ISec
13.05.2018
22:05:57
и тут два варианта
либо писать вручную геттеры и сеттеры, либо маппить отдельно геттеры и отдельно сеттеры, как в доках
во втором случае придется писать кучу обработчиков и отпадывает использование v-model
если есть вариант удобнее, буду рад услышать

Ivan
13.05.2018
22:09:35
а при изменении важно что бы в vuex данные сразу менялись, или можно их при нажатии "сохранить" обновлять?

ISec
13.05.2018
22:10:46
хм
скорее всего, можно и по кнопке.
вот только разницы в размере кода я не вижу,
в data() все равно объявлять придется, плюс обработчик по кнопке

Ivan
13.05.2018
22:18:39
в computed пишем функцию
dataLocal(){
return {...this.$store.state.abc}
}
а при сохранить, dataLocal в commit в vuex переносим
таким образом при ошибке изменении формы, в vuex данные остаются норм
используются стандартные средства vue
и не нужно на каждый параметр мутатор создавать
я так делаю

ISec
13.05.2018
22:25:13
надо это как-то в обычный data() загнать

Ivan
13.05.2018
22:26:13