在vue中使用回调函数,this调用无效的解决
letself=this//使用新变量替换this,以免this无效
//updateStudentInfoToServer是一个将本身部分数据异步上传的接口,接收三个参数,其中第一个是数据,第二、三个是函数,第二、三个函数使用function(){}形式书写
updateStudentInfoToServer:function(data,networkOk,networkError){ letpostData=this.$qs.stringify({ data:data }) this.axios.post('/api/update/updateStudentInfo', postData ).then(res=>{ console.log('return:') console.log(res) networkOk(res)//网络成功的回调 }).catch(error=>{ console.log(error) networkError(error)//网络失败的回调 }) console.log('axiosdone') }, this.updateStudentInfoToServer(data,function(res){ console.log('returnok') console.log(res) //console.log('self') //console.log(self)//就是this //console.log('this') //console.log(this)//undefined self.handleCancelEdit() },function(error){ console.log(error) } )
提交网络数据是异步调用,所以会先返回然后才执行成功、失败的回调。
这种书写方式,function的作用于决定了function的代码块内使用this无法改变、获取vuedata中设置的变量
使用es6的箭头语法可以实现this的随处调用
this.updateStudentInfoToServer(this,res=>{ console.log('returnok') console.log(res) console.log('self') console.log(self) console.log('this') console.log(this)//this和self一样 },error=>{ console.log(error) } )
不过某些浏览器的某些版本不支持es6的语法,可能导致各种各样的问题
补充知识:vue在全局函数中加回调,调用vue文件中的函数
全局函数可以写一个文件globalFunc.js
exports.install=function(Vue,option){ Vue.prototype.setData=function(that,key){ that[key]='222' } Vue.prototype.testCallMe=function(str){ console.log('testcallme'+str) } Vue.prototype.testCallBack=function(func,param){ func(param) this.testCallMe('tetetet') } }
main.js
importglobalFuncfrom'@/components/globalFunc'
Vue.use(globalFunc)
vue文件中
调用
this.testCallBack(this.test,'yui0')//使用全局函数调用vue文件中的函数,修改vue文件中的数据
this.setData(this,'msg')//使用全局函数修改vue文件中的数据
test函数编写
test:function(str){ this.msg='233'+str },
以上这篇在vue中使用回调函数,this调用无效的解决就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。