在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 相关文章推荐
JavaScript中setInterval的用法总结
Nov 20 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
Nov 21 Javascript
javascript 拷贝节点cloneNode()使用介绍
Apr 03 Javascript
Javascript基础教程之if条件语句
Jan 18 Javascript
vue构建单页面应用实战
Apr 10 Javascript
微信小程序 配置顶部导航条标题颜色的实现方法
Sep 20 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
Feb 05 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
Apr 17 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
May 26 Javascript
这应该是最详细的响应式系统讲解了
Jul 22 Javascript
JS实现烟花爆炸效果
Mar 10 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
Aug 06 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
怎么使 Mysql 数据同步
2006/10/09 PHP
php读取数据库信息的几种方法
2008/05/24 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
Gambit vs CL BO3 第三场 2.13
2021/03/10 DOTA
Jquery 动态添加按钮实现代码
2010/05/06 Javascript
JQuery跨Iframe选择实现代码
2010/08/19 Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
如何改进javascript代码的性能
2015/04/02 Javascript
浅谈node中的exports与module.exports的关系
2017/08/01 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
vue中的watch监听数据变化及watch中各属性的详解
2018/09/11 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
Django框架安装方法图文详解
2019/11/04 Python
python做接口测试的必要性
2019/11/20 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
python多线程和多进程关系详解
2020/12/14 Python
python中最小二乘法详细讲解
2021/02/19 Python
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
18-35岁旅游团的全球领导者:Contiki
2017/02/08 全球购物
黄继光的英雄事迹材料
2014/02/13 职场文书
合作协议书范本
2014/04/17 职场文书
优秀毕业生就业推荐信
2014/05/22 职场文书
学雷锋活动倡议书
2014/08/30 职场文书
乡镇安全生产月活动总结
2015/05/08 职场文书
签字仪式主持词
2015/07/03 职场文书
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android