나는 사용자 프로필 섹션과 사용자가 자신의 정보를 편집 할 수있게하려고합니다. vuex를 사용하여 사용자 프로필 데이터를 저장하고 양식으로 가져옵니다. 편집 양식은 userProfile 구성 요소의 하위 구성 요소에 있습니다. 데이터 저장을로드하면 VUEX에 커밋됩니다.Vuejs 2, VUEX, 데이터 편집시 데이터 바인딩
VUEX의 데이터로 양식을 채울 수 있지만 양식의 값을 변경하면 부모 구성 요소의 값도 변경됩니다.
양식이 저장 될 때까지 VUEX에 변경 사항을 적용하지 않으므로 데이터가 VUEX에 양방향으로 바인딩된다는 의미입니다. 나는 이것이 가능하지 않다는 인상하에 있었다. 이 경우 사용자가 일부 데이터를 변경 한 다음 실제로 "저장"을 클릭하지 않고 탐색하면 데이터가 여전히 변경됩니다.
참고 : 이것은 단순화 된 예입니다. 실제로 자식 구성 요소를로드하기 위해 라우터보기를 사용하거나, 소품을 통해 데이터를 전달합니다. 내가 아래에있는 것처럼 직접 편집 - 프로필 구성 요소를로드 테스트, 나는 동일한 문제가 있습니다.
아래 코드를 참조하십시오. 왜 데이터가 상점으로 다시 전송되는지 확인할 수 없습니다. 어떤 도움이라도 대단히 감사합니다.
<template>
<div class="content">
<h1>{{getUserDetails.firstname}} {{getUserDetails.lastname}} </h1>
<edit-profile></edit-profile>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import EditProfile from './Edit.vue';
export default {
data() {
return {
// data
}
},
created() {
this.fetchData();
},
components: {
EditProfile:EditProfile
},
computed: mapGetters([
'getUserDetails'
]),
methods: {
fetchData: function() {
var _this = this;
// ajax call - then
_this.$store.commit('setData', {
name: 'userDetails',
data: response.data.data.userDetails
});
}
}
}
</script>
이 결과를로드하고 가게에서 그들을 저장하고 잘 작동 : 부모에
, 정말 같은 사용자 데이터를 검색 설정합니다.내 상점이 있습니다 여기
const store = new Vuex.Store({
state: {
userDetails: {}
},
mutations: {
setData(state, payload){
state[payload.name] = payload.data;
}
},
getters: {
getUserDetails: state => {
return state.userDetails;
}
}
}
모두가 노력하고 있습니다. 편집 양식 내 아이 구성 요소에서
, 나는 다음과 같은 양식을 채우는 오전 :<template>
<form>
<label>Name</label>
<input name="firstname" v-model="profile.firstname">
<input name="lastname" v-model="profile.lastname">
<button v-on:click="save">submit</button>
</form>
</template>
<script>
import {mapGetters } from 'vuex';
export default {
data() {
return {
profile:{}
}
},
watch: {
getUserDetails (newData){
this.profile = newData;
}
},
created(){
this.profile = this.$store.getters.getUserDetails;
},
computed: mapGetters([
'getUserDetails'
]),
methods:{
save(){
var _this = this;
// ajax call to POST this.profile then
_this.$store.commit('setData', {
name: 'userDetails',
data: this.profile
});
}
}
}
</script>
감사. 이 작업을 수행하는 좀 더 우아한 방법이 있어야하는 것 같지만 충분히 잘 작동합니다. –