在vue中使用回调函数,this调用无效的解决


Posted in Javascript onAugust 11, 2020

let self = this //使用新变量替换this,以免this无效

//updateStudentInfoToServer是一个将本身部分数据异步上传的接口,接收三个参数,其中第一个是数据,第二、三个是函数,第二、三个函数使用function(){}形式书写

updateStudentInfoToServer:function(data, networkOk, networkError){
 let postData = 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('axios done')
}, 
 
this.updateStudentInfoToServer(data, function(res){
  console.log('return ok')
  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无法改变、获取vue data中设置的变量

使用es6的箭头语法可以实现this的随处调用

this.updateStudentInfoToServer(this, res=>{
  console.log('return ok')
  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('test call me' + str)
 }
 
 Vue.prototype.testCallBack = function(func, param){
 func(param)
 this.testCallMe('tetetet')
 }
}

main.js

import globalFunc from '@/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调用无效的解决就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
跟着JQuery API学Jquery 之三 筛选
Apr 09 Javascript
jquery插件之easing使用
Aug 19 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
Jul 31 Javascript
javascript抽象工厂模式详细说明
Dec 16 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
Dec 24 jQuery
浅谈React高阶组件
Mar 28 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
Dec 21 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
Oct 08 jQuery
Vue路由对象属性 .meta $route.matched详解
Nov 04 Javascript
JavaScript实现移动端弹窗后禁止滚动
May 25 Javascript
在实例中重学JavaScript事件循环
Dec 03 Javascript
vue中使用echarts的示例
Jan 03 Vue.js
vue 调用 RESTful风格接口操作
Aug 11 #Javascript
vue之封装多个组件调用同一接口的案例
Aug 11 #Javascript
vue接口请求加密实例
Aug 11 #Javascript
vue组件暴露和.js文件暴露接口操作
Aug 11 #Javascript
vue npm install 安装某个指定的版本操作
Aug 11 #Javascript
小程序自动化测试的示例代码
Aug 11 #Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
Aug 11 #Javascript
You might like
php导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
Yii框架弹出框功能示例
2017/01/07 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
PHP实现时间日期友好显示实现代码
2019/09/08 PHP
js CSS操作方法集合
2008/10/31 Javascript
javascript中关于执行环境的杂谈
2011/08/14 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
jQuery操作表单常用控件方法小结
2015/03/23 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
Bootstrap表单布局
2016/07/19 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
vue2中filter()的实现代码
2017/07/09 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
js实现轮播图特效
2020/05/28 Javascript
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
Python callable()函数用法实例分析
2018/03/17 Python
Python中低维数组填充高维数组的实现
2019/12/02 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
高一新生军训方案
2014/05/12 职场文书
门店业绩提升方案
2014/06/08 职场文书
男人帮观后感
2015/06/18 职场文书
新闻通讯稿模板
2015/07/22 职场文书
校园运动会广播稿
2015/08/19 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
postgresql使用filter进行多维度聚合的解决方法
2021/07/16 PostgreSQL
MySQL批量更新不同表中的数据
2022/05/11 MySQL