Установка значения в поле ввода с помощью модулей магазина Vuex
У меня есть vuex в режиме модуля, который извлекает данные пользователя:
магазин / модули /users.js
import axios from "axios";
export const state = () => ({
user: {}
});
// Sets the values of data in states
export const mutations = {
SET_USER(state, user) {
state.user = user;
}
};
export const actions = {
fetchUser({ commit }, id) {
console.log(`Fetching User with ID: ${id}`);
return axios.get(`${process.env.BASE_URL}/users/${id}`)
.then(response => {
commit("SET_USER", response.data.data.result);
})
.catch(err => {
console.log(err);
});
}
};
// retrieves the data from the state
export const getters = {
getUser(state) {
return state.user;
}
};
тогда на моих страницах шаблона / пользователи /_id/index.vue
<b-form-input v-model="name" type="text"></b-form-input>
export default {
data() {
return {
name: ""
}
},
created() {
// fetch user from API
this.$store.dispatch("fetchUser", this.$route.params.id);
}
}
Теперь я проверяю получатели, у меня есть объект getUser, и я вижу атрибут. Как я могу назначить значение имени из геттеров vuex в поле ввода?
2 ответа
наблюдатель, вероятно, то, что вам нужно
export default {
// ...
watch: {
'$store.getters.getUser'(user) {
this.name = user.name;
},
},
}
Хотя ответ Джейкоба не обязательно неверен, лучше использовать вместо него вычисляемое свойство. Вы можете прочитать об этом здесь
computed: {
user(){
return this.$store.getters.getUser
}
}
Затем введите имя через {{user.name}}
или создайте имя вычисляемого свойства
computed: {
name(){
return this.$store.getters.getUser.name
}
}
Редактировать: скрипку в качестве примера https://jsfiddle.net/uy47cdnw/
Edit2: Пожалуйста, обратите внимание, что если вы хотите изменить объект через это поле ввода, вы должны использовать ссылку, предоставленную Джейкобом.