首页 > 其他分享 >Vue3:监听属性

Vue3:监听属性

时间:2022-09-20 22:36:54浏览次数:62  
标签:watch 监听 reactive num oldvalue Vue3 msg newvalue 属性

监听属性

  • 与vue2.x中的watch配置功能一致

  • 注意

    • 监视reactive定义的响应式数据时,oldvalue无法正确获取,强制开始了深度监视(deep的配置失效)

    • 监视reactive定义的响应式数据的某一个值时:deep配置有效

 

<template>
  <div class="home">
    <h1>{{num}}</h1>
    <h1>{{msg}}</h1>

    <button @click="num++">点击num++</button>
    <button @click="addmsg()">点击msg+!</button>
  </div>
</template>

<script>

// 注意:vue2.x和vue3.x不要混用
// 1.引入
import { watch, ref,reactive } from "vue"
export default {

  data() {
    return {

    }
  },
  computed: {
  },


  setup() {

    let num = ref(0);
    let msg = ref("hello");
    let person = reactive({
        name:"李国栋",
        age:18,
        more:{
            job:"前端开发工程师",
            salary:"12k"
        }
    })

    // 1.监听ref定义的响应式数据
    watch(num, (newvalue, oldvalue) => {
      console.log("num变量", newvalue, oldvalue);
    })


    // 2.监听多个ref定义的响应式数据
    watch([num, msg], (newvalue, oldvalue) => {
      console.log("msg数据变化了", newvalue, oldvalue);
    })

    let addmsg = () => {
      msg.value += "!"
    }
    
    
    //3.监听reactive所定义的一个响应式数据的全部属性
    //注意:此处无法正确的获取oldvalue
    //注意:并且强制开启了深度监视(deep配置无效)
    
    watch(person, (newvalue, oldvalue) => {
      console.log("person数据变化了", newvalue, oldvalue);
    },{deep:false})
      
    //4.监听reactive所定义的一个响应式数据的某一个属性
    watch(()=>person.name, (newvalue, oldvalue) => {
      console.log("person数据变化了", newvalue, oldvalue);
    },{deep:false})

    return { num, msg, addmsg }

  }

}
</script>

 

 

 

标签:watch,监听,reactive,num,oldvalue,Vue3,msg,newvalue,属性
From: https://www.cnblogs.com/LIXI-/p/16712829.html

相关文章

  • flex 子元素属性设置
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content=......
  • Vue3:生命周期
    Vue3.x的生命周期在Vue3.x中,新增了一个setup生命周期函数,setup执行的时机是在beforeCreate生命函数之前执行,因为在这个函数中不能通过this来获取实例的;同时为了命名的统一......
  • flex 父元素属性
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content=......
  • flex 布局属性
    父元素属性设置|-设置主轴方向|-设置子元素是跟着主轴来排序的方式|-默认的主轴是X轴Y轴是侧轴flex-direction:{row默认值从左到右row-reve......
  • Java中字符串、数组、集合及JSONArray的长度属性
    前言:数组没有length()这个方法,有length的属性。String有有length()这个方法。1.String字符串Stringstr="abcdefg";str.length(); 2.Array数组int[]arr=newint......
  • vue3在单独的js文件中使用pinia报错:getActivePinia was called with no active Pinia.
    1、之前在main.js中使用方式是:import{createPinia}from'pinia'constpinia=createPinia();app.use(pinia);2、现在的问题是我要再建一个js文件,需要用到我建的pini......
  • 高版本jdk的访问私有成员属性的正确姿势
    在jdk17+已经不能直接通过setAccessible来访问私有属性了Fieldname=access.getClass().getDeclaredField("name");name.setAccessible(true);name.set(access,"666......
  • 属性的获取与设置
    获取style样式属性1、在js中,通过document.getElementById("id").style.xxx就可以获得元素的XXX属性值,但是,这种方法只能获取到内嵌方式设置的样式值。2、通过getCompute......
  • el-scrollbar 横向滚动 监听滚动事件
    横向滚动隐藏横向滚动条.el-scrollbar__wrap{overflow-x:hidden;}显示横向滚动条.el-scrollbar__wrap{overflow-x:auto;}.el-scrollbar__view{......
  • VUE3 动态添加路由
    在vue2中我们通常使用如下方式添加动态路由:router.addRoute(parentOrRoute,route)//添加单个router.addRoutes(routes)//添加多个在vue3......