说明:通过、保存、作废、环境申请同意按钮是写在子组件中,在上面的页面中引入使用的
子组件中的按钮代码:
<a-button type="primary" @click="visible = true">环境申请同意</a-button>
<a-modal
title="环境申请同意"
:visible="visible"
:confirm-loading="confirmLoading"
okText="确定"
cancelText="取消"
@ok="OkBtn"
@cancel="visible = false"
>
<a-form-model
:labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
:wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }">
<a-form-model-item label="移交:">
<a-select v-model="transfer" placeholder="请选择">
<a-select-option value="forward">前进</a-select-option>
<a-select-option value="backward">回退</a-select-option>
<a-select-option value="cancel">作废</a-select-option>
</a-select>
</a-form-model-item>
</a-form-model>
</a-modal>
<!-- confirmLoading 是控制按钮loading状态的 confirmLoading是通过父组件中的请求接口完成来控制的 transfer是传给父组件请求接口时传参 OkBtn事件发生就会触发父组件中的函数-->
OkBtn(){
this.confirmLoading = true; // 控制按钮loading状态 防止重复点击
this.$emit('agree', this.transfer, val => { // val是父组件请求接口返回的数据
this.confirmLoading = false;
this.visible = false;
})
}
父组件中的代码:
import ProcessNavigator from '@/components/Process/ProcessNavigator.vue' // 引入子组件
components:{ProcessNavigator} //生命组件
// 在html中使用
<process-button-group
v-model="this.wrapper.Process"
:key="processButtonsKey"
@moveTo="handleMoveTo"
@save="handleSave"
@return="handleReturn"
@agree="handleAgree"
/>
// agree就是在子组件中this.$emit穿的第一个参数,绑定的方法传值,handleAgree则是用在父组件中的方法
handleAgree(data, callback) { // data时子组件中transfer,callback是比较重要的,就是通过这个把父组件请求接口完成的信息传到子组件的,wrapper是请求接口返回的值
replyFreeAsync( // 接口
Id,
{
'type': '2',
'transfer': data,
'Comment': '',
}, // Id和Id后面的对象都是传给接口的参数
(wrapper: any) => { // 接口请求成功之后
this.$router.go(-1)
callback(wrapper)
}
)
}
这样写就可以在父组件中请求接口,并通过接口请求完成通过callback带回数据,从而在this.$emit的第三个参数callback中进行相应的逻辑编写。