当前位置: 首页 > news >正文

vue中,watch里,this为undefined的两种解决办法

提示:vue中,watch里,this为undefined的两种解决办法

文章目录

    • @[TOC](文章目录)
  • 前言
  • 一、问题
  • 二、方法1——使用function函数代替箭头函数()=>{}
  • 三、方法2——使用that
  • 总结

前言

‌‌‌‌‌尽量使用方法1——使用function函数代替箭头函数()=>{}
【使用that方式,父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题】

一、问题

打印watch中this是undefined
在这里插入图片描述
1、selectCom.vue

<template>
    <div class="select_com">
      <div class="select_com_content" ref="printImgContent">
          <el-select v-model="model" placeholder="请选择">
              <el-option v-for="item in options" :key="item.value" :label="item.name" :value="item.value">
              </el-option>
          </el-select>
      </div>
    </div>
  </template>
  <script>
    export default {
      name: 'preview',
      props:{
        type:{
            type:String,
            default:'car',
        }
      },
      data () {
        return {
            model:'',
            optionsData:{
                car:[
                    {
                        name:'丰田',
                        value:'1',
                    },
                    {
                        name:'大众',
                        value:'2',
                    },
                    {
                        name:'起亚',
                        value:'3',
                    },
                    {
                        name:'别克',
                        value:'4',
                    },
                ],
                animal:[
                    {
                        name:'猫',
                        value:'1',
                    },
                    {
                        name:'狗',
                        value:'2',
                    },
                    {
                        name:'牛',
                        value:'3',
                    },
                    {
                        name:'羊',
                        value:'4',
                    },
                ],
            },
            options:[],
        }
      },
      watch:{
        type:{
            handler:()=>{
                console.log(this,'-------------')
            },
            deep:true
        }
      },
    }
    </script>
  <style scoped></style>

2、home.vue组件

<template>
    <div class="home_box">
      <el-button @click="changeType('car')">car</el-button><el-button @click="changeType('animal')">animal</el-button>
      <selectCom :type="type"></selectCom>
    </div>
</template>
  
<script>
  import selectCom from './preview/selectCom';
  
  export default {
    name: 'Hmoe',
    components:{selectCom},
    data () {
      return {
        type:'car',
      }
    },
    methods: {
      changeType(type){
        this.type = type;
      },
    }
  }
  </script>
  <style scoped></style>

二、方法1——使用function函数代替箭头函数()=>{}

打印watch中that(即this)
在这里插入图片描述
在这里插入图片描述
selectCom.vue

<template>
    <div class="select_com">
      <div class="select_com_content" ref="printImgContent">
          <el-select v-model="model" placeholder="请选择">
              <el-option v-for="item in options" :key="item.value" :label="item.name" :value="item.value">
              </el-option>
          </el-select>
      </div>
    </div>
  </template>
  <script>
    export default {
      name: 'preview',
      props:{
        type:{
            type:String,
            default:'car',
        }
      },
      data () {
        return {
            model:'',
            optionsData:{
                car:[
                    {
                        name:'丰田',
                        value:'1',
                    },
                    {
                        name:'大众',
                        value:'2',
                    },
                    {
                        name:'起亚',
                        value:'3',
                    },
                    {
                        name:'别克',
                        value:'4',
                    },
                ],
                animal:[
                    {
                        name:'猫',
                        value:'1',
                    },
                    {
                        name:'狗',
                        value:'2',
                    },
                    {
                        name:'牛',
                        value:'3',
                    },
                    {
                        name:'羊',
                        value:'4',
                    },
                ],
            },
            options:[],
        }
      },
      watch:{
        type:{
            handler:function(){
                console.log(this,'-------------');
            },
            deep:true
        }
      },
    }
    </script>
  <style scoped></style>
  

三、方法2——使用that

打印watch中that(即this)
在这里插入图片描述
在这里插入图片描述
selectCom.vue

<template>
    <div class="select_com">
      <div class="select_com_content" ref="printImgContent">
          <el-select v-model="model" placeholder="请选择">
              <el-option v-for="item in options" :key="item.value" :label="item.name" :value="item.value">
              </el-option>
          </el-select>
      </div>
    </div>
  </template>
  <script>
  let that;
    export default {
      name: 'preview',
      props:{
        type:{
            type:String,
            default:'car',
        }
      },
      data () {
        return {
            model:'',
            optionsData:{
                car:[
                    {
                        name:'丰田',
                        value:'1',
                    },
                    {
                        name:'大众',
                        value:'2',
                    },
                    {
                        name:'起亚',
                        value:'3',
                    },
                    {
                        name:'别克',
                        value:'4',
                    },
                ],
                animal:[
                    {
                        name:'猫',
                        value:'1',
                    },
                    {
                        name:'狗',
                        value:'2',
                    },
                    {
                        name:'牛',
                        value:'3',
                    },
                    {
                        name:'羊',
                        value:'4',
                    },
                ],
            },
            options:[],
        }
      },
      watch:{
        type:{
            handler:()=>{
                console.log(that,'-------------');
            },
            deep:true
        }
      },
      created(){
        that = this;
      },
    }
    </script>
  <style scoped></style>
  

总结

踩坑路漫漫长@~@

相关文章:

  • 哨兵2号遥感影像解析全流程:步骤、算法与AI应用详解
  • 【好书推荐-第一期】《一书读懂物联网:基础知识+运行机制+工程实现》
  • 批量给 Excel 添加或删除密码保护|Excel 批量设置打开密码和只读密码
  • 文档解析:PDF、图片内容deepseek解析出错怎么办?
  • AI时代,GIS的出路:地理智慧的智能化革命
  • Java对接微信支付全过程详解
  • MySQL慢SQL优化方案详解:从诊断到根治的完整指南
  • 实验四 Python聚类决策树训练与预测 基于神经网络的MNIST手写体识别
  • BUUCTF Pwn [ZJCTF 2019]EasyHeap unlink+freehook做法
  • 《Python实战进阶》第21集:数据存储:Redis 与 MongoDB 的使用场景
  • 高频面试题(含笔试高频算法整理)基本总结回顾32
  • 【redis】list类型:基本命令(下)
  • 小程序网络大文件缓存方案
  • 5-27 临摹大师-IP-Adapter
  • DataGear部署文档(基于openeuler)
  • Android头像布局
  • 谷歌Gemma 3:开启AI新纪元的强大引擎
  • Secure and Privacy-Preserving Decentralized Federated Learning同态加密联邦学习文献阅读
  • 缓存和客户端数据存储体系(Ark Data Kit)--- 应用数据持久化(首选项持久化、K-V、关系型数据库)持续更新中...
  • 华三交换机配置流桶(通常称为“流策略”或“流行为”)
  • 天元建设集团有限公司电话/seo自然优化排名
  • 南京网站建设公司 w/谷歌关键词
  • 哪个网站可以做条形码/网站开发技术有哪些
  • 织梦文章采集到wordpress/seo优化工作怎么样
  • 给自己的家乡建设网站/中文网站排行榜
  • 北京人力资源网站/做seo需要哪些知识