私は、行のグリッドを持つ親コンポーネントを持っており、私は新しいレコードを追加するので、vuexを使ってデータを渡しています。新しく追加されたレコードをモーダルウィンドウで開きたいと思います。私はイベントを発行し、最初のレコード(index = 0)でモーダルを開きます。問題は、vuexの "action"を使ってレコードを追加するajax呼び出しであるため、レコードが追加される前にemitが実行されるということです。レコードにイベントが追加されるまでどのように待つことができますか?それとももっと良い方法がありますか?以下はVueJSでの発送後にイベントを発行するにはどうすればよいですか?
コードです:
<!-- 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])
}
}
私store.js addrow
コンポーネントでとても
state: {
rows : []
}
それは
methods:{
onsubmit(){
this.$store.dispatch('addrow',this.newrow);
this.$emit("newrecordadded");
}
}
actions.js
をvuexする派遣提出フォームをユーザーがクリックする度
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);
}
または代わりに、私たちは、ディスパッチするコールバック関数を渡すことができますか?あなたが今行うことができ、あなたのコンポーネント内のonSubmitメソッドで
addrow({ commit,state }, payload){
var url = "/add";
return Axios.post(url,payload)
.then(function(response){
commit('addnewrow',response.data);
});
}
:
の必要はありませんラップ約束'Axios.post(...)を返し、then(...)'が実行します。 – Bert