在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 相关文章推荐
RGB颜色值转HTML十六进制(HEX)代码的JS函数
Apr 25 Javascript
重载toString实现JS HashMap分析
Mar 13 Javascript
基于jQuery的星级评分插件
Aug 12 Javascript
有关jquery与DOM节点操作方法和属性记录
Apr 15 Javascript
JavaScript数据存储 Cookie篇
Jul 02 Javascript
微信小程序中实现一对多发消息详解及实例代码
Feb 14 Javascript
js调用刷新界面的几种方式
May 03 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
Mar 07 Javascript
解决node修改后需频繁手动重启的问题
May 13 Javascript
Vue 使用beforeEach实现登录状态检查功能
Oct 31 Javascript
在vue-cli中引入lodash.js并使用详解
Nov 13 Javascript
5分钟快速看懂ES6中的反射与代理
Dec 19 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
PHP伪静态页面函数附使用方法
2008/06/20 PHP
php2html php生成静态页函数
2008/12/08 PHP
php 生成静态页面的办法与实现代码详细版
2010/02/15 PHP
php切割页面div内容的实现代码分享
2012/07/31 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
php去除二维数组的重复项方法
2015/11/03 PHP
CI框架入门之MVC简单示例
2016/11/21 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
js 日期比较相关天数代码
2014/04/02 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
JavaScript ES2019中的8个新特性详解
2019/02/20 Javascript
了解Javascript中函数作为对象的魅力
2019/06/19 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
Zookeeper接口kazoo实例解析
2018/01/22 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
什么是接口(Interface)?
2013/02/01 面试题
本科毕业生应聘求职信
2014/07/06 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
2015年全国科普日活动总结
2015/03/23 职场文书
自书遗嘱范文
2015/08/07 职场文书
nginx搭建NFS网络文件系统
2022/04/14 Servers
解决MySQL报“too many connections“错误
2022/04/19 MySQL