在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 相关文章推荐
20款超赞的jQuery插件 Web开发人员必备
Feb 26 Javascript
js日期相关函数总结分享
Oct 15 Javascript
JavaScript调用ajax获取文本文件内容实现代码
Mar 28 Javascript
jquery 取子节点及当前节点属性值
Jul 25 Javascript
JavaScript基础语法、dom操作树及document对象
Dec 02 Javascript
JavaScript实现可拖拽的拖动层Div实例
Aug 05 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
Feb 02 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
Mar 30 Javascript
浅谈JavaScript中变量和函数声明的提升
Aug 09 Javascript
浅谈JavaScript 覆盖原型以及更改原型
Aug 31 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
Feb 10 Javascript
JS Web Flex弹性盒子模型代码实例
Mar 10 Javascript
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安全配置
2006/10/09 PHP
将二维数组转为一维数组的2种方法
2014/05/26 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
Joomla框架实现字符串截取的方法示例
2017/07/18 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
JS 实现导航栏悬停效果
2013/09/23 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
js动态生成Html元素实现Post操作(createElement)
2015/09/14 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
python实现从web抓取文档的方法
2014/09/26 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
浅谈python requests 的put, post 请求参数的问题
2019/01/02 Python
python简单贪吃蛇开发
2019/01/28 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
简历中自我评价分享
2013/10/09 职场文书
给客户的道歉信
2014/01/13 职场文书
学生请假条
2014/04/11 职场文书
公司会议策划方案
2014/05/17 职场文书
企业口号大全
2014/06/12 职场文书
防震减灾主题班会
2015/08/14 职场文书
Pytorch distributed 多卡并行载入模型操作
2021/06/05 Python
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis
Mysql数据库手动及定时备份步骤
2021/11/07 MySQL