在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 提交和设置表单的值
Dec 19 Javascript
Javascript Tab 导航插件 (23个)
Jun 11 Javascript
JS OOP包机制,类创建的方法定义
Nov 02 Javascript
基于Jquery的表格隔行换色,移动换色,点击换色插件
Dec 22 Javascript
jQuery.clean使用方法及思路分析
Jan 07 Javascript
JavaScript 基本概念
Jan 20 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
Aug 26 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
Jul 10 Javascript
Angular使用ng-messages与PHP进行表单数据验证
Dec 28 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
May 12 jQuery
JS页面动态绘图工具SVG,Canvas,VML介简介
Oct 16 Javascript
Map与WeakMap类型在JavaScript中的使用详解
Nov 18 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
神族 Protoss 剧情介绍
2020/03/14 星际争霸
php结合飞信 免费天气预报短信
2009/05/07 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
2013/06/18 PHP
解析php session_set_save_handler 函数的用法(mysql)
2013/06/29 PHP
php中函数前加&符号的作用分解
2014/07/08 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
js 中的switch表达式使用示例
2020/06/03 Javascript
javascript中普通函数的使用介绍
2013/12/19 Javascript
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
[01:07]DOTA2次级职业联赛 - Fpb战队宣传片
2014/12/01 DOTA
PyQt QListWidget修改列表项item的行高方法
2019/06/20 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
django 模版关闭转义方式
2020/05/14 Python
python中wx模块的具体使用方法
2020/05/15 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
求职简历自荐信
2013/10/20 职场文书
教师个人自我评价范文
2014/04/13 职场文书
毕业生求职信范文
2014/06/29 职场文书
房产公证委托书范本
2014/09/20 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
离婚起诉书范本
2015/05/18 职场文书
爱的教育观后感
2015/06/17 职场文书
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis
Django中celery的使用项目实例
2022/07/07 Python
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers