首页 > 其他分享 >监视属性watch

监视属性watch

时间:2022-12-02 15:24:16浏览次数:35  
标签:vue watch person oldValue 监视 ref newValue 属性

1.当被监视的属性变化时,回调函数自动调用,进行相关操作
2.监视的属性必须存在,才能进行监视
3.自定义属性和计算属性都可以被监听
深度监视:
(1)vue中的watch默认不检测对象内部值的变化(一层)
(2)配置deep:true可以检测对象内部值的改变(二层)
备注:
(1)vue自身可以检测内部值的改变,但vue提供的watch默认不可以
(2)使用watch时根据数据的具体结构,决定是否采用深度检测

<template>
    <div>
        <div>当前求和:{{sum}}</div>
        <button @click="sum++">点击+1</button>
    </div>
</template>
<script>
import { watch,ref, reactive } from 'vue'
export default {
    setup(){
        let sum=ref(0)
        let msg=ref('你好,李焕英')
        let person=reactive({
            name:'章三',
            age:18,
            job:{
                j1:{
                    salary:'20K'
                }
            }
        })
        //情况一:监听ref所定义的一个响应式数据
        watch(sum,(oldValue,newValue)=>{
            console.log('监听到了改变',oldValue,newValue);
        })
        //情况二:监听ref所定义的多个响应式数据
        watch([sum,msg],(newValue,oldValue)=>{
            console.log('sum or msg 变化了',newValue,oldValue);
        })
        //情况三:监听reactive所定义的一个响应式数据,注意,此处无法正确的展示旧value
        watch(person.value,(newValue,oldValue)=>{
            console.log('person变化了',newValue,oldValue);
        })
        //情况四:监听reactive所定义的一个响应式数据中的某个属性
        watch(()=>person.name,(newValue,oldValue)=>{
            console.log('person的name变化了',newValue,oldValue);
        })
        //情况五:监听reactive所定义的一个响应式数据中的某些属性
        watch([()=>person.name,()=>person.age],(newValue,oldValue)=>{
            console.log('person的name和age变化了',newValue,oldValue);
        })
        return {
            sum,
            msg,
            person
        }
    }
}
</script>

用监视属性完成计算属性的案例->名字拼接

<template>
    <div>
        <h1>一个人的信息</h1>
        姓:<input type="text" v-model="firstName" />
        <br>
        名:<input type="text" v-model="lastName" />
        <br>
        全名:<span>{{fullName}}</span>
        <br>
        修改:<input type="text" v-model="fullName" />
    </div>
</template>
<script setup>
import { watch,ref} from 'vue'
    let firstName=ref('张')
    let lastName=ref('三')
    let fullName=ref('张-三')
    watch(firstName,(newValue,oldValue)=>{
        setTimeout(()=>{
        fullName.value=newValue+'-'+lastName.value
        },1000)

    })
    watch(lastName,(newValue,oldValue)=>{
        fullName.value=firstName.value+'-'+newValue

    })
</script>

computed和watch之间的区别:
1.computed能完成的功能,watch都可以完成
2.watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作
vue2中两个有关this重要的小原则
1.所有被vue管理的函数,最好写成普通函数,这样this的指向才是vm或组件实例对象
2.所有不被vue所管理的函数(定时器的回调、ajax的回调函数,promise回调函数等),最好写成箭头函数,这样this的指向才是vm或组件实例对象

 

标签:vue,watch,person,oldValue,监视,ref,newValue,属性
From: https://www.cnblogs.com/shuchenhao/p/16944554.html

相关文章

  • vue3新增知识点(组合式API、ref和reactive、响应式原理、setup、watch和watchEffect)持
    1.组合式API和声明式API的区别,组合式API的优点2.Vue3的响应式原理通过Proxy(代理):拦截对象中任意属性的变化:包括:属性值的读写、属性的添加、属性的删除等。通过reflect(反射):......
  • application.yml与application.properties文件的相互转换、属性提取
    packagecom.liftsail.testprofiledemo.utiltest;importorg.springframework.util.CollectionUtils;importjava.util.*;/***@Author:liftsail*@Date:2022/......
  • 利用Apache的commons-beanutils和commons-collections包实现Java对象的按属性排序
    在日常工作中经常用到需要对java对象集合或者Map集合中的某个属性做排序,这个需求可以利用Apache的commons-beanutils和commons-collections包来实现,主......
  • html5 中的download属性
    在传统的html中,某个文件的下载,是这样的:<ahref="=/files/abc1234564545.pdf">report</a>而在HTML5浏览器中,可以支持download属性了,如下:<ahref="......
  • (收藏)window.location.hash属性介绍
    ​​http://www.html-js.com/article/JavaScript-focus-and-keyboard​​​location是javascript里边管理地址栏的内置对象,比如location.href就管理......
  • 2022 VS编译器如何实现监视
    前言:我们在运行代码时,有时出现BUG,这时,我们需要一个debug的过程,而强大的VS编译器提供监视这一功能帮助我们更高效的debug,但很多小伙伴找不到监视窗口,我来给大家解惑。为什么......
  • 4_解决属性名字段名不一致问题
    1.问题出现以上情况,会出现password显示为null解决办法:起别名,将数据库表中的名字在UserMapper中改为在实体类中定义的名字,修改sql<selectid="getUserById"resultTy......
  • 计算属性
    <!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <scriptsrc="js/vue.js"type="text/javascript"charset="utf-8"></script> <title></title> </head> ......
  • js,jQuery获取html5的data-*属性
    js,jQuery获取html5的data-*属性  今天做项目的时候发现一个坑,关于jQuery获取data-*属性的方法data(),特写此篇来记录。data-*自定义数据属性HTML5规定可以为元......
  • HTML属性
    属性为HTML元素提供附加信息。HTML属性HTML标签可以拥有属性。属性提供了有关HTML元素的更多的信息。属性总是以名称/值对的形式出现,比如:name="value"。属性总是......