#vue.js #vuex
#vue.js #vuex
Вопрос:
У меня возникла проблема с проектом в Vue JS и VueX. У нас есть модальный компонент, который должен открываться или закрываться по нажатию кнопки. Поэтому мы хорошо проинформировали в Vue X правильный модальный модуль:
namespaced: true,
state : {
show: false
},
// Getter functions
getters : {
showModal( state ) {
return state.show
}
},
actions : {
showModal({commit}){
commit('SHOWMODAL');
}
},
// Mutations
mutations : {
SHOWMODAL(state) {
state.show = !state.show
}
}
}
export default ModalModule;// export the module
В компоненте, который запускает действие, мы импортировали получатели и действия
<script>
import { mapGetters, mapActions } from 'vuex';
export default {
data() {
return {
};
},
computed: {
...mapGetters('ModalModule', [
'showModal',
])
},
components: {
},
methods: {
...mapActions('ModalModule', [
'showModal',
]),
}
};
</script>
И в шаблоне :
<button
class="bg-green-500 text-white active:bg-green-600 font-bold uppercase text-xs px-4 py-2 rounded shadow hover:shadow-md outline-none focus:outline-none mr-1 ease-linear transition-all duration-150"
type="button"
@click="showModal()"
>
FERMER
</button>
Но когда я нажимаю на эту кнопку, она не работает, и когда я нажимаю на кнопку, которая открывает модальный у меня есть :
<button
class="bg-green-500 active:bg-green-600 uppercase text-white font-bold hover:shadow-md shadow text-xs px-4 py-2 rounded outline-none focus:outline-none sm:mr-2 mb-1 ease-linear transition-all duration-150"
type="button"
@click="showModal()"
>
У меня это сообщение об ошибке :
Computed property "showModal" was assigned to but it has no setter.
И когда я нажимаю на кнопку Фермера, у меня это :
Error in v-on handler: "TypeError: _vm.showModal is not a function"
я не понимаю, почему большое вам спасибо, если у вас есть ключ.
Комментарии:
1. Оба вычисляемых свойства и метода имеют одно и то же имя, поэтому вы получаете эту ошибку.
2. Ваша проблема заключается в том, что вы не можете сопоставить оба действия и методы с одним и тем же именем
showMethod
. Когда вы вызываетеshowMethod
в своем шаблоне, он фактически пытается установить значение (потому что у вас есть средство получения с тем же именем).
Ответ №1:
Вы должны указать псевдоним при сопоставлении вашего действия с методами, чтобы предотвратить столкновение имен:
methods: {
...mapActions('ModalModule', {
'toggleShowModal' : 'showModal',
}),
А затем в вашем шаблоне используйте псевдоним :
<button class="bg-green-500 active:bg-green-600 uppercase text-white font-bold hover:shadow-md shadow text-xs px-4 py-2 rounded outline-none focus:outline-none sm:mr-2 mb-1 ease-linear transition-all duration-150"
type="button"
@click="toggleShowModal()"
>