在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 相关文章推荐
bgsound 背景音乐 的一些常用方法及特殊用法小结
May 11 Javascript
JQuery在光标位置插入内容的实现代码
Jun 18 Javascript
js判断生效时间不得大于失效时间的思路及代码
Apr 23 Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
Sep 04 Javascript
JS实现的N多简单无缝滚动代码(包含图文效果)
Nov 06 Javascript
JavaScript笔记之数据属性和存储器属性
Mar 31 Javascript
浅析JavaScript异步代码优化
Mar 18 Javascript
angularjs1.X 重构controller 的方法小结
Aug 15 Javascript
vue中使用v-for时为什么不能用index作为key
Apr 04 Javascript
Angular8 简单表单验证的实现示例
Jun 03 Javascript
解决vue的touchStart事件及click事件冲突问题
Jul 21 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
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
php设计模式 Interpreter(解释器模式)
2011/06/26 PHP
PHP 透明水印生成代码
2012/08/27 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
php 判断字符串中是否包含html标签
2014/02/17 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
php递归调用删除数组空值元素的方法
2015/04/28 PHP
JQuery对checkbox操作 (循环获取)
2011/05/20 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
2014/10/16 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
javaScript语法总结
2016/11/25 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
Python实现子类调用父类的方法
2014/11/10 Python
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
python实现教务管理系统
2018/03/12 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
总结html5自定义属性有哪些
2020/04/01 HTML / CSS
遗嘱公证书标准样本
2014/04/08 职场文书
建筑管理专业求职信
2014/07/28 职场文书
感谢师恩主题班会
2015/08/17 职场文书