在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 相关文章推荐
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
Dec 22 Javascript
js对数字的格式化使用说明
Jan 12 Javascript
javascript定义变量时加var与不加var的区别
Dec 22 Javascript
浅谈Javascript中Object与Function对象
Sep 26 Javascript
基于jquery实现省市区三级联动效果
Dec 25 Javascript
关于webpack代码拆分的解析
Jul 20 Javascript
Vue实现数字输入框中分割手机号码的示例
Oct 10 Javascript
element-ui表格列金额显示两位小数的方法
Aug 24 Javascript
解决vue 绑定对象内点击事件失效问题
Sep 05 Javascript
Vue 解决多级动态面包屑导航的问题
Nov 04 Javascript
Node对CommonJS的模块规范
Nov 06 Javascript
用javascript制作qq注册动态页面
Apr 14 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
文件上传类
2006/10/09 PHP
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
php一个找二层目录的小东东
2012/08/02 PHP
php在数组中查找指定值的方法
2015/03/17 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
php cli配置文件问题分析
2015/10/15 PHP
PHP简单获取及判断提交来源的方法
2016/04/22 PHP
关于Javascript 的 prototype问题。
2007/01/03 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
Javascript Objects详解
2014/09/04 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
vue中@change兼容问题详解
2019/10/25 Javascript
Python中几种导入模块的方式总结
2017/04/27 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
Order by的几种用法
2013/06/16 面试题
文案策划求职信
2014/04/14 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
观后感开头
2015/06/19 职场文书
生日赠语
2015/06/23 职场文书
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS
Nginx配置文件详解以及优化建议指南
2021/09/15 Servers