Итак, мне удалось получить watch
элемент из state
, но я также хочу обновить элемент из состояния.
Это то, что я пытался, но он не работает:
<template>
<input :style="styleForX" ... />
</template>
// script in template file :: isXActive returns focus input = true/false
watch: {
isXActive: (isXActive) => {
console.log(123);
this.$store.commit("SET_STYLE_FOR_X", isXActive);
},
},
computed: {
...mapGetters([
"styleForX",
]);
// state.js
export default state = {styleForX: ""}
// getters.js
styleForX: (state) => {
return state.styleForX;
},
// action.js
SET_STYLE_FOR_X({commit}, isXActive) {
const style = isXActive? {backgroundColor: "white", zIndex: "51"} : "";
commit("SET_STYLE_FOR_X", style);
},
// mutation.js
SET_STYLE_FOR_X(state, styleForX) {
state.styleForX= styleForX;
}
Каждый файл js имеет оператор export default
. Есть идеи, как мне заставить это работать?
- Обновление:
Изменен код на:
watch: {
isXActive: () => {
this.$store.commit("SET_STYLE_FOR_X", {backgroundColor: "white", zIndex: "51"});
},
, но все равно не работает. Я получаю this
как undefined
, поэтому я получаю эту ошибку:
Error in callback for watcher "isXActive": "TypeError: Cannot read property '$store' of undefined" found in ...
Обновление - я изменил это на это, и это работает. Но если кто-то знает, как заставить работать первую версию, оставьте комментарий. Спасибо!
created() {
this.$store.watch(
() => this.$store.state.isXActive,
() => {
this.$store.commit("SET_STYLE_FOR_X", {backgroundColor: "white", zIndex: "51"});
}
);
}
Обновление - поскольку стиль не был удален при фокусировке, я снова изменил его на:
created() {
this.$store.watch(
() => this.$store.state.isXActive,
() => {
this.$store.dispatch("SET_STYLE_FOR_X", isXActive);
}
);
}
// action.js
SET_STYLE_FOR_X({commit}, isXActive) {
const style = isXActive? {backgroundColor: "white", zIndex: "51"} : "";
commit("SET_STYLE_FOR_X", style);
},
Обновление - конечный результат
watch: {
isXActive() {
this.$store.commit("SET_STYLE_FOR_X", this.$store.state.isXActive);
},
Спасибо, eli chen !!