在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从头学起第二讲
Jul 04 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
Jul 18 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
Jan 05 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
Aug 17 Javascript
JavaScript实现同一个页面打开多张图片
Dec 29 Javascript
BootStrap实现轮播图效果(收藏)
Dec 30 Javascript
微信小程序 实战实例开发流程详细介绍
Jan 05 Javascript
详解Angular 4.x NgIf 的用法
May 22 Javascript
小程序组件之仿微信通讯录的实现代码
Sep 12 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
Sep 04 Javascript
使用layui的layer组件做弹出层的例子
Sep 27 Javascript
简单了解JavaScript sort方法
Nov 25 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
德生S2000电路分析
2021/03/02 无线电
初探PHP5
2006/10/09 PHP
10个实用的PHP代码片段
2011/09/02 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
使用PHP导出Redis数据到另一个Redis中的代码
2014/03/12 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
javascript web页面刷新的方法收集
2009/07/02 Javascript
JavaScript中number转换成string介绍
2014/12/31 Javascript
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
很酷的星级评分系统原生JS实现
2016/08/25 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
jQuery点击导航栏选中更换样式的实现代码
2017/01/23 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
vue中的适配px2rem示例代码
2018/11/19 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
TensorFlow平台下Python实现神经网络
2018/03/10 Python
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
Python 日期区间处理 (本周本月上周上月...)
2019/08/08 Python
通过Python扫描代码关键字并进行预警的实现方法
2020/05/24 Python
python编程的核心知识点总结
2021/02/08 Python
个人贷款承诺书
2014/03/28 职场文书
创先争优承诺书范文
2014/03/31 职场文书
通信工程专业求职信
2014/06/04 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
少儿励志名言(80句)
2019/08/14 职场文书
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL
django中websocket的具体使用
2022/01/22 Python