vue watch监听的多种使用

news/2024/6/18 22:01:47 标签: vue.js, watch

简述:vue 的watch的监听使用的几种写法。常用第4中写法。 

一、$route监听路由跳转

前提:当需要前端监听路由跳转的时候,一般写在App.vue入口

//App.vue
//vue2、uniapp写法
watch: {
    $route(to, from) {
      if (hasPermission(to.path)) {
        this.$store.commit("setIisShipGuid", false);
      } else {
        this.$store.commit("setIisShipGuid", true);
      }
    },
  },

二、监听store中的某些变量

//vue2、uniapp写法 
watch: {
    "$store.state.isShipGuid": {
      handler(newVal, oldVal) {
        if (newVal !== oldVal) {
          this.isShipGuid = newVal;
        }
      },
      immediate: true,
      deep: true,
    },
  },
//vue3 setup写法
watch(
  () => store.selectShip.mmsi,
  (oldNum, newNum) => {
    if (oldNum != newNum) {
      try {
        cabin.getEngineRoomMenu(store.selectShip.mmsi);
      } catch (error) {
        cabin.getEngineRoomMenu(store.selectShip.mmsi);
      }
    }
  },
  { immediate: true, deep: true }
);

三、自定义组件内部监听传参

//封装的一个图表组件。监听传参
//vue2、uniapp
export default {
  props: {
    height: {
      type: String,
      default: "100%",
    },
    width: {
      type: String,
      default: "100%",
    },
    echartsId: {
      type: String,
      required: true,
    },
    series: {
      type: Array,
      default: [],
    },
    title: {
      type: Object,
      default: null,
    },
  },
  //监听传参
  watch: {
    myOption: function (newVal) {
      if (newVal) {
        console.log(
          "=================================================================="
        );
        this.myCharts.clear();
        this.init();
      }
    },
    series: function (newVal) {
      if (newVal) {
        console.log(
          "=================================================================="
        );
        this.myCharts.clear();
        this.init();
      }
    },
  },
}
//vue3写法
//监听多个参数的数组的写法
watch(
  [() => props.modelValue, () => data.defaultFileList],
  ([newValue1, newValue2]) => {
    console.log("newValue1", newValue1, "newValue2", newValue2);
  },
  { deep: true }
);

四、监听单个页面组件内部的data()

(一)、监听某一个对象

 data() {
    return {
      isActive: 0,
 }}
//vue2、uniapp写法
//vue2在单个页面组件内部,只能有一个watch
//vue3在单个页面组件内部,可以有多个watch
  watch: {
    isActive(newval) {
      this.currentIndex = newval;
    },
    "$store.state.mmsi": {
      handler(newVal, oldVal) {
        if (newVal !== oldVal) {
          this.mmsi = newVal;
          this.getEngineRoomMenu(this.mmsi);
        }
      },
      immediate: true,
      deep: true,
    },
  },

(二)、监听一个对象的某一个属性

//vue、uniapp写法
watch: {
	'search.name': {
		handler() {
			// todo
		},
	}
}
或者:
computed: {
    getName: function() {
    	return this.search.name
    }
}
watch: {
     getName: {
         handler: function() {
            //todo 
         },
     }
}

 

const data = reactive({
  ruleForm: {
    param: {},
  },
)
//vue3写法
watch(
  () => data.ruleForm.param.publishType,
  (newName, oldName) => {
    if (newName === 1) {
      data.useridsList_display = true;
    } else if (newName === 0) {
      data.ruleForm.param.useridsList = [];
      data.useridsList_display = false;
    }
  },
  {
    immediate: true,
    deep: true,
  }
);

其它, 


http://www.niftyadmin.cn/n/5476538.html

相关文章

SpringBoot及其特性

0.前言 Spring 框架提供了很多现成的功能。那么什么是 Spring Boot?使用 Spring 框架,我们可以避免编写基础框架并快速开发应用程序。为了让 Spring 框架提供基础框架,我们需要向 Spring 框架描述有关我们的应用程序及其组件的信息。 不只是…

JavaScript之作用域链详解

在JavaScript中,作用域链是一个重要的概念,它决定了变量和函数的可访问性。作用域链是由变量对象的列表组成,这些变量对象按照它们被创建的顺序排列。本文将详细介绍JavaScript作用域链,包括什么是作用域链、作用域链的创建过程、…

文旅元宇宙|“元宇宙+”全面赋能智慧文旅场景建设

元宇宙作为下一代互联网入口,正在潜移默化的改变着人生的生活方式,不断催生新业态,带给人们前所未有的体验。元宇宙概念的崛起,正以其独特的魅力,引领着一场全新的智慧文旅革命。元宇宙,这个融合了虚拟现实…

LinkedHashMap 集合源码分析

LinkedHashMap 集合源码分析 文章目录 LinkedHashMap 集合源码分析一、字段分析二、内部类分析三、构造方法分析四、内部方法分析五、总结 LinkedHashMap 是 HashMap 的子类,在 HashMap 的基础上维护了双向链表,保证了有序性。默认是不排序的&#xff0c…

如何恢复被.locked勒索病毒加密的服务器和数据库?

.locked勒索病毒有什么特点? .locked勒索病毒的特点主要包括以下几个方面: 文件加密:.locked勒索病毒会对受感染设备上的所有文件进行加密,包括图片、文档、视频和其他各种类型的重要文件。一旦文件被加密,文件的扩展…

每天学习python30分钟(第三天)

一.面向对象 了解oop for i in range(1,5):for j in range(1,5):for k in range(1,5):if((i!j) and (i!k) and (j!k)):print(i,j,k) 二.类 基础的类使用 class CuteCat: #通过calss创建可爱猫猫类def __init__(self,cat_name,cat_age,cat_color): #定义属性s…

前端学习<二>CSS基础——16-浏览器的兼容性问题

我们在div里放一个img&#xff0c;发现&#xff1a; 在html和html5中&#xff0c;div的长宽是不同的&#xff0c;后者的高度要超过几个像素。 比如说&#xff0c;下面这个是html的。 <!DOCTYPE html><html lang"en"><head><meta charset"…

2024-04-07 作业

作业要求&#xff1a; 1> 思维导图 2> 自由发挥应用场景实现一个登录窗口界面。 【可以是QQ登录界面、也可以是自己发挥的登录界面】 要求&#xff1a;尽量每行代码都有注释 作业1&#xff1a; 作业2&#xff1a; 运行代码&#xff1a; #include "myqwidget.h&quo…