vue学习:打开/刷新一个页面时,触发一个后端请求
由于业务系统最近更改了一些内部处理逻辑,所以我需要对应改造一下创建数据时调用的接口
之前的逻辑:创建合同时,每条数据需要先关联一个项目,合同与项目之间是多对一的,也就是不同的合同可以关联同一个项目。所以当初写这个接口时,我把项目写死了
现在的逻辑:合同与项目直接改为1对1,也就是一个项目只能被一个合同所关联
最开始的思路是,写一个创建项目的接口A,然后每次在创建合同时先调用接口A,然后查到这个项目引用即可,把逻辑都放在后端。
后来发现之前前端页面中已经有一个创建项目的功能,所以只需要每次创建合同时,触发下这个创建项目的请求就行,然后再去获取创建好的项目
简单拆解需求后,可以通过如下2种方式处理:
1、每次刷新页面,都触发一下创建项目的请求(这样的话,只要刷新下页面,我就可以得到一个新项目,然后这个新项目可以被合同绑定)
2、每次点击创建合同的按钮后,先执行创建项目的请求,然后执行创建合同的请求(创建好项目后,后端处理下把这个项目跟即将创建的合同绑定,接着执行创建合同,这样每次创建合同时,都会跟最新的项目绑定)
方法1:刷新页面后,执行创建项目的请求
打开页面所在的vue文件,我这里是contract_create.vue
在methods下新增一个函数
methods: { get_project() { let url_hmk = "http://10.237.4.83:8000" let url2 = "http://10.237.6.72:8080" this.$http.get(url_hmk+"/create_operate/", {timeout: 10000, params: { project_name: "" } } ) },
......
......
......
}
添加一个钩子函数 created,在里面调用 get_project()
created() { this.get_project() },
效果如下,每次刷新页面,都会触发一个请求
方法2: 点击按钮后触发2个请求
在原有 submitForm() 函数下添加一个新的请求,它用来创建项目
submitForm(formName) { let url_hmk = "http://10.237.xx.xx:8000" let url2 = "http://10.237.xx.xx:8000" this.button_mark = true this.button_text = "正在提交..." this.$refs[formName].validate((valid) => { if (valid) { this.$http.get(url_hmk+"/create_operate/", {timeout: 10000, params: { project_name: "" } } ) this.$http.get(url_hmk+"/data_factory/create_contract_data", { // timeout: 10000, params:{ contract_name:this.ruleForm.contractid, contract_classify_id:this.ruleForm.resource1, contract_type_id:this.ruleForm.resource2, status:this.ruleForm.resource3, } })
......
......
......
这样其实点击按钮可以依次触发2个请求,但是此时这2个请求是同时触发的,当第一个请求触发后,第二个请求并不等待第一个请求执行完就会开始执行,所以第一个请求产生的数据不会被第二个请求用到
需要更改下,让第二个请求能够使用第一个请求实时产生的数据
submitForm(formName) { let url_hmk = "http://10.237.xx.xx:8000" let url2 = "http://10.237.xx.xx:8000" this.button_mark = true this.button_text = "正在提交..." this.$refs[formName].validate(async (valid) => { if (valid) { await this.$http.get(url_hmk+"/create_operate/", {timeout: 10000, params: { project_name: "" } } ) this.$http.get(url_hmk+"/data_factory/create_contract_data", { // timeout: 10000, params:{ contract_name:this.ruleForm.contractid, contract_classify_id:this.ruleForm.resource1, contract_type_id:this.ruleForm.resource2, status:this.ruleForm.resource3, } })