VueJ에서 디스패치 후 이벤트를 내보내는 방법
행 그리드가 있는 부모 컴포넌트가 있으며 vuex를 사용하여 데이터를 전달하고 있습니다.새 레코드를 추가할 때 새로 추가된 레코드를 모달 창에서 열고 싶습니다.이벤트를 내보내고 첫 번째 레코드로 모달(index = 0)을 엽니다.문제는 vuex "액션"을 사용하여 레코드를 추가하는 것은 Ajax 콜이기 때문에 레코드가 추가되기 전에 방출이 발생한다는 것입니다.이벤트와 함께 레코드가 추가될 때까지 어떻게 기다려야 하나요?아니면 더 좋은 방법이 있을까요?
코드는 다음과 같습니다.
<!-- Grid Component -->
<grid>
<addrow @newrecordadded="openNewlyAddedRecord"></addrow>
<gridrow v-for="row in rows" :key="row._id"></gridrow>
</grid>
computed: {
rows(){
return this.$store.state.rows;
}
},
methods:{
openNewlyAddedRecord(){
this.openmodal(this.rows[0])
}
}
내 스토어.인텔
state: {
rows : []
}
그래서addrow
사용자가 제출 양식을 클릭하면 vuex로 디스패치되는 컴포넌트
methods:{
onsubmit(){
this.$store.dispatch('addrow',this.newrow);
this.$emit("newrecordadded");
}
}
actions.js
addrow({ commit,state }, payload){
var url = "/add";
Axios.post(url,payload)
.then(function(response){
commit('addnewrow',response.data);
});
}
mutations.js
addnewrow(state,payload){
state.rows.unshift(payload);
}
또는 콜백 기능을 디스패치에 전달할 수 있습니까?
다음과 같이 addrow 작업을 통해 약속을 반환할 수 있습니다.
addrow({ commit,state }, payload){
var url = "/add";
return Axios.post(url,payload)
.then(function(response){
commit('addnewrow',response.data);
});
}
컴포넌트의 on submit 메서드에서 다음 작업을 수행할 수 있습니다.
this.$store.dispatch('addrow',this.newrow).then(() => this.$emit("newrecordadded");)
언급URL : https://stackoverflow.com/questions/45205265/how-do-i-emit-an-event-after-dispatch-in-vuejs
'programing' 카테고리의 다른 글
VueJ 컴포넌트 간에 데이터를 공유하는 방법s (0) | 2022.08.08 |
---|---|
vue.timeout - v-timeout 대체 (0) | 2022.08.08 |
사전에 URL을 모르는 상태에서 http를 통해 사전 구축한 재사용 가능한 Vuejs 컴포넌트를 로드하려면 어떻게 해야 합니까? (0) | 2022.08.08 |
모달 닫힐 때까지 기다렸다가 OK 또는 CANCEL을 클릭하여 실행을 계속하려면 어떻게 해야 합니다. (0) | 2022.08.08 |
IntelliJ - Java 프로젝트/모듈을 Maven 프로젝트/모듈로 변환 (0) | 2022.08.08 |