在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 相关文章推荐
限制文本字节数js代码
Mar 06 Javascript
JavaScript Event学习第二章 Event浏览器兼容性
Feb 07 Javascript
jQuery超赞的评分插件(8款)
Aug 20 Javascript
Angularjs 创建可复用组件实例代码
Oct 09 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
Mar 03 Javascript
详解webpack打包vue时提取css
May 26 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
Oct 26 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
Feb 11 Javascript
浅谈webpack4 图片处理汇总
Sep 12 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
Sep 14 Javascript
JavaScript如何判断对象有某属性
Jul 03 Javascript
解决vue自定义指令导致的内存泄漏问题
Aug 04 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
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
PHP简单获取视频预览图的方法
2015/03/12 PHP
PHP实现表单提交时去除斜杠的方法
2016/12/26 PHP
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
兼容FF和IE的动态table示例自写
2013/10/21 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
详解Javascript动态操作CSS
2014/12/08 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
基于vue手写tree插件的那点事儿
2019/08/20 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
简介JavaScript错误处理机制
2020/08/04 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
全面了解python中的类,对象,方法,属性
2016/09/11 Python
python实现括号匹配的思路详解
2018/08/23 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
详解Python二维数组与三维数组切片的方法
2019/07/18 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
2020/04/02 Python
Python3.7下安装pyqt5的方法步骤(图文)
2020/05/12 Python
解决pycharm中的run和debug失效无法点击运行
2020/06/09 Python
python怎么自定义捕获错误
2020/06/29 Python
如何删除一个表里面的重复行
2013/07/13 面试题
优秀企业获奖感言
2014/02/01 职场文书
网络技术专业求职信
2014/02/18 职场文书
爱心捐书活动总结
2014/07/05 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
Python基于Opencv识别两张相似图片
2021/04/25 Python
python中pycryto实现数据加密
2022/04/29 Python