首页 > 其他分享 >VUE全局this指向

VUE全局this指向

时间:2022-12-01 17:38:34浏览次数:39  
标签:VUE console log 指向 testArr let forEach 全局 testData

前言

在很久很久之前我还是个菜鸡的时候,解决报错的时候,不幸看过一种关于this指向的写法,当时没记住,只知道有个这么个模糊的概念,然后今天晚上来了灵感,就写出来了,说到这个this指向问题,很多刚入行的前端同学应该多会碰到,那么今天就写一下关于全局this指向的代码,让我们的代码更加简洁。

传统写法

问题代码

<template>
    <div>
     	<div @click="test">按钮</div>
    </div>
</template>
<script>
	export default {
        name: "test",
        data(){
            return{
                testArr:[1,2,3,4,5],
                testData:"data"
            }
        },
        methods:{
			test(){
                this.testArr.forEach(function(value) {
                    console.log("===>",this.testData);
                });
            }
        }
    }
</script>

报错
VUE全局this指向_前端
既然说找不到testData,我们明明在data里挂载了testData数据,但是这里获取不到,这是因为这里经过forEach循环后this的指向变了,那么通常的解决方案就是声明一个let _this=this;的写法
解决

<script>
			test(){
                let _this=this;
                this.testArr.forEach(function(value) {
                    console.log("===>",_this.testData);
                });
            }
</script>

当然咯这种并没有问题,但是我们如果有很多方法都存在this指向问题的时候,那么我们的代码就会下面这样

<script>
			test1(){
                let _this=this;
                this.testArr.forEach(function(value) {
                    console.log("===>",_this.testData);
                });
            },
            test2(){
                let _this=this;
                this.testArr.forEach(function(value) {
                    console.log("===>",_this.testData);
                });
            },
            test3(){
                let _this=this;
                this.testArr.forEach(function(value) {
                    console.log("===>",_this.testData);
                });
            },
            test4(){
                let _this=this;
                this.testArr.forEach(function(value) {
                    console.log("===>",_this.testData);
                });
            }
          
</script>

假设test1、test2、test3、test4,都是业务代码,那么这里每次方法中都要声明let _this=this;就很烦!!!

VUE全局this指向

<template>
    <div>
     	<div @click="test">按钮</div>
    </div>
</template>
<script>
	let _this=null;
	export default {
        name: "test",
        data(){
            return{
                testArr:[1,2,3,4,5],
                testData:"data"
            }
        },
        created(){
            _this=this
        },
        methods:{
			test(){
                this.testArr.forEach(function(value) {
                    console.log("===>",_this.testData);
                });
            }
        }
    }
</script>

即使我们有再多存在this指向问题的代码也不需要每个方法中写let _this=this;代码了,直接通过外部创建的_this搞定

标签:VUE,console,log,指向,testArr,let,forEach,全局,testData
From: https://blog.51cto.com/u_15899048/5903395

相关文章

  • vue全局引入scss(mixin)
    前言today,isgoodday,中午吃了个农民工外卖,有点撑,想在床上躺会,TMD,睁开眼天黑了,别说,冬天的上海天黑的挺早,基本上五点半就已经全黑了,住在出租屋的我,却感觉不到上海的灯火通......
  • VUE在线调用阿里Iconfont图标库
    前言多年前我本是个服务端小白,随着行业内卷,硬是被熬成了前端小白。。。开个玩笑,只是个人比较喜欢学习技术罢了!本章将带领大家以另一个高端的方式打开阿里Iconfont图标库,......
  • vue
    VUE笔记介绍Vue CLI 4.5.x才会有Vue3安装vue cli安装nodenode-vnpminstall-g@vue/clinpmi-gvue@vue/clivue-v设置阿里云镜像创建项目npm create ......
  • 将 Vue.js 项目部署至静态网站托管,并开启 Gzip 压缩
    摘要:关于使用Nginx开启静态网站Gzip压缩的教程已经有很多了,但是好像没几个讲怎么在对象存储的静态网站中开启Gzip压缩。其实也不复杂,我们一起来看下~本文分享自华为......
  • VUE小白笔记-初入者
    错误vscode格式化代码报错错误[Error-15:07:33]RequesttextDocument/formattingfailed.Message:RequesttextDocument/formattingfailedwithmessage:Ove......
  • 前端(五)-Vue简单基础
    1、Vue概述Vue(读音/vju/,类似于view)是一套用于构建用户界面的渐进式框架,发布于2014年2月。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库......
  • vuex状态管理器
    vuex核心概念//vuex中一共有五个状态StateGetterMutationActionModuleimportVuefrom'vue'importVuexfrom'vuex'Vue.use(Vuex)exportdefaultn......
  • vue 一次滑动整个屏幕
    <divid="wrap":style="{height:screenHeight+'px'}"><divid="main":style="{top:nowTop+'px'}"><ulid="pageUl"type="circle">......
  • Vue实用框架-Ruoyi(项目打包)
    Vue实用框架-Ruoyi(项目打包)ruoyi前后端分离版项目的服务器打包官网已经做了比较详细的说明,但实际运行踩了点小坑,可能跟我喜欢用tomcat+nginx有关系,所以特此补充:官方打......
  • [Vue3-10]表单数据绑定
    1.输入框2.单选多选3.下拉选择......