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

news2025/3/14 12:00:45

提示: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>
  

总结

踩坑路漫漫长@~@

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2314854.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式C++

针对一些经典的常见的场景, 给定了一些对应的解决方案&#xff0c;这个就叫设计模式。 设计模式的作用&#xff1a;使代码的可重用性高&#xff0c;可读性强&#xff0c;灵活性好&#xff0c;可维护性强。 设计原则&#xff1a; 单一职责原则&#xff1a;一个类只做一方面的…

前端构建工具进化论:从Grunt到Turbopack的十年征程

前端构建工具进化论&#xff1a;从Grunt到Turbopack的十年征程 一、石器时代&#xff1a;任务自动化工具&#xff08;2012-2014&#xff09; 1.1 Grunt&#xff1a;首个主流构建工具 // Gruntfile.js 典型配置 module.exports function(grunt) {grunt.initConfig({concat: {…

设备预测性维护:企业降本增效的关键密码​

在当今竞争激烈的商业战场中&#xff0c;企业犹如一艘在波涛汹涌大海上航行的巨轮&#xff0c;要想乘风破浪、稳步前行&#xff0c;降本增效便是那至关重要的 “船锚”&#xff0c;帮助企业在复杂的市场环境中站稳脚跟。而设备预测性维护&#xff0c;正是开启企业降本增效大门的…

css基本功

为什么 ::first-letter 是伪元素&#xff1f; ::first-letter 的作用是选择并样式化元素的第一个字母&#xff0c;它创建了一个虚拟的元素来包裹这个字母&#xff0c;因此属于伪元素。 grid布局 案例一 <!DOCTYPE html> <html lang"zh-CN"><head&…

信号处理抽取多项滤波的数学推导与仿真

昨天的《信号处理之插值、抽取与多项滤波》&#xff0c;已经介绍了插值抽取的多项滤率&#xff0c;今天详细介绍多项滤波的数学推导&#xff0c;并附上实战仿真代码。 一、数学变换推导 1. 多相分解的核心思想 将FIR滤波器的系数 h ( n ) h(n) h(n)按相位分组&#xff0c;每…

C++双端队列知识点+习题

在C中&#xff0c;双端队列&#xff08;Deque&#xff0c;发音为“deck”&#xff09;是标准模板库&#xff08;STL&#xff09;中的一种容器适配器&#xff0c;其全称为Double-Ended Queue。它结合了队列和栈的特点&#xff0c;允许在容器的两端&#xff08;前端和后端&#x…

【递归、搜索和回溯算法】专题二 :二叉树中的深搜

二叉树中的深搜 深度优先遍历&#xff08;DFS&#xff09;&#xff1a;一种沿着树或图的深度遍历节点的算法&#xff0c;尽可能深地搜索树或图的分支&#xff0c;如果一条路径上的所有结点都被遍历完毕&#xff0c;就会回溯到上一层&#xff0c;继续找一条路遍历。 在二叉树中…

【vue3学习笔记】(第150-151节)computed计算属性;watch监视ref定义的数据

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 本篇内容对应课程第150-151节 课程 P150节 《computed计算属性》笔记 写一个简单的 姓、名输入框效果&#xff1a; 用vue2的形式定义一个计算属性 fullName&#xff1a; 测试页面展示无问题&#xff1a; 但是&#xff0c;在vue…

MySQL 8 设置允许远程连接(Windows环境)

&#x1f31f; MySQL 8 设置允许远程连接&#xff08;Windows环境&#xff09; 在开发和部署应用时&#xff0c;经常需要从远程主机连接到MySQL数据库。默认情况下&#xff0c;MySQL仅允许本地连接&#xff0c;因此需要进行一些配置才能允许远程访问。今天&#xff0c;我将详细…

我又又又又又又更新了~~纯手工编写C++画图,有注释~~~

再再再次感谢Ttcofee提的问题 本次更新内容&#xff1a; 鼠标图案&#xff08;切换&#xff09;&#xff0c;版本号获取&#xff0c;输入框复制剪切板 提前申明&#xff1a;如果运行不了&#xff0c;请到主页查看RedpandaDevc下载&#xff0c;若还是不行就卸了重装。 版本号&…

全面解析:将采购入库单数据集成到MySQL的技术实施

旺店通旗舰版-采购入库单集成到MySQL的技术案例分享 在数据驱动的业务环境中&#xff0c;如何高效、准确地实现系统间的数据对接是企业面临的重要挑战。本文将聚焦于一个具体的系统对接集成案例&#xff1a;将旺店通旗舰奇门平台上的采购入库单数据集成到MySQL数据库中&#x…

12. Pandas :使用pandas读Excel文件的常用方法

一 read_excel 函数 其他参数根据实际需要进行查找。 1.接受一个工作表 在 11 案例用到的 Excel 工作簿中&#xff0c;数据是从第一张工作表的 A1 单元格开始的。但在实际场景中&#xff0c; Excel 文件可能并没有这么规整。所以 panda 提供了一些参数来优化读取过程。 比如 s…

记录致远OA服务器硬盘升级过程

前言 日常使用中OA系统突然卡死&#xff0c;刷新访问进不去系统&#xff0c;ping服务器地址正常&#xff0c;立马登录服务器检查&#xff0c;一看磁盘爆了。 我大脑直接萎缩了&#xff0c;谁家OA系统配400G的空间啊&#xff0c;过我手的服务器没有50也是30台&#xff0c;还是…

Java网络多线程

网络相关概念: 关于访问: IP端口 因为一个主机上可能有多个服务, 一个服务监听一个端口,当你访问的时候主机通过端口号就能知道要和哪个端口发生通讯.因此一个主机上不能有两个及以上的服务监听同一个端口. 协议简单来说就是数据的组织形式 好像是两个人交流一样,要保证自己说…

VScode 运行LVGL

下载vscode解压 环境安装 安装mingw64&#xff0c;gcc 版本必须8.3以上 安装cmak 系统环境变量Path中添加&#xff08;以实际安装目录为准&#xff09; C:\Program Files\mingw64\bin C:\Program Files\CMake\bin 将GUI-Guider生成的代码目录拷贝一份放到vscode项目目录…

React Next项目中导入Echart世界航线图 并配置中文

公司业务要求做世界航线图&#xff0c;跑了三个ai未果&#xff0c;主要是引入world.json失败&#xff0c;echart包中并不携带该文件&#xff0c;源码的world.json文件页面404找不到。需要自己寻找。这是整个问题卡壳的关键点&#xff0c;特此贴出资源网址。 目录 一、安装 二…

QT与网页显示数据公式的方法

一.网页中显示数学公式通常有三种主要方法 1.图片方式 原理&#xff1a;将公式转换为图片&#xff08;如 PNG、SVG&#xff09;&#xff0c;通过 <img> 标签嵌入网页。 实现步骤&#xff1a; 使用工具&#xff08;如 LaTeX dvipng、在线生成工具&#xff09;将公式渲…

深入解析APP订阅页的运作机制(订阅页如何运作)

在当今数字经济的背景下&#xff0c;订阅模式已成为许多企业获取稳定收入的重要方式。无论是软件、视频流媒体还是电子商务&#xff0c;订阅服务都能为用户提供持续的价值体验。然而&#xff0c;如何有效地设计和运作一个订阅页&#xff0c;是决定用户是否愿意订阅的关键因素。…

Golang倒腾一款简配的具有请求排队功能的并发受限服务器

golang官方指南[1]给了一些代码片段&#xff0c;层层递进演示了信道的能力: 1>. 信号量2>. 限流能力 var sem make(chan int, MaxOutstanding) func Serve(queue chan *Request) {for req : range queue {req: reqsem <- 1 go func() { // 只会开启MaxOutstandin…

【运维】服务器系统从centos7重装为ubuntu22.04

目录 一、硬盘准备二、系统安装三、安装基本系统组件四、挂载机械硬盘五、问题解决 一、硬盘准备 【注意&#xff1a;这一步会把硬盘的数据清空&#xff0c;所以需要找一个空的U盘或者把U盘数据备份】 ubuntu22.04下载 需要先安装 bittorrent 下载完之后会打开一个网页 然后…