先貼上代碼 子組件代碼 1 //子組件請求介面,用自己封裝的axios 2 getupdate(){ 3 this.$post({ 4 url:this.$apis.unitupdate, 5 postType:'json' 6 }) 7 .then( () => { 8 this.$emit("g ...
先貼上代碼
子組件代碼
1 //子組件請求介面,用自己封裝的axios
2 getupdate(){
3 this.$post({
4 url:this.$apis.unitupdate,
5 postType:'json'
6 })
7 .then( () => {
8 this.$emit("getlist")//成功之後觸發更新列表
9 })
10 },
11 this.close() //關掉彈窗
父組件代碼
//父組件
//在父組件中插入子組件彈窗 getlist是在子組件觸發的事件
<Dialogedit v-if="showdialog" @getlist="getList"> </Dialogedit>
<script>
//請求列表
method:{
getList(){
this.$get({
url:this.$apis.drugunit,
query:this.params
})
.then( res => {
this.mainList = res.data.list
})
},
}
</script>
這樣做就會出現一個問題 就是在子組件中,this.$emit觸發不了或者延遲
原因是在觸發this.$emit請求返回需要時間,而在請求過程(因為是非同步所以會先執行下麵的操作),調用了this.close(this.close是定義好的方法)將彈窗關閉,所以導致this.$emit不能返回
只要把this.close放到then裡面就可以了就是請求成功才關閉視窗
getupdate(){
this.$post({
url:this.$apis.unitupdate,
param:this.formModel,
postType:'json'
})
.then( () => {
this.$emit("getlist")
this.close()
})
這樣就會在關閉視窗前更新列表