vue2中watch的用法(通俗易懂,简单明了)
更新时间:2023年09月14日 09:36:59 作者:coderkey
这篇文章主要给大家介绍了关于vue2中watch用法的相关资料,通过watch监听器,我们可以实时监控数据的变化,并且在数据发生改变时进行相应的操作,需要的朋友可以参考下
一,监听基本普通属性:
字符串,布尔值,number
(1)把要监听的msg值看作方法名,来进行监听。
<template> <div id="app"> <div> <button @click="btnClick">触发</button> <div>{{ msg }}</div> </div> </div> </template> <script> export default { data() { return { msg: "codekey", } }, methods: { btnClick() { this.msg = 'pink' } }, watch: { // watch第一次绑定值的时候不会执行监听,修改数据才会触发函数 msg(newVal,oldVal) { console.log('oldVal:',oldVal) // coderkey console.log('newVal:',newVal) // pink } } }; </script>
(2)把要监听的msg值看作对象,利用hanler方法来进行监听
watch第一次绑定值的时候不会执行监听,如果需要第一次就执行监听 则需要设置: immediate: true
<template> <div id="app"> <div> <button @click="btnClick">触发</button> <div>{{ msg }}</div> </div> </div> </template> <script> export default { data() { return { msg: "codekey", } }, methods: { btnClick() { this.msg = 'pink' } }, watch: { // 如果需要第一次就执行监听 则需要设置:immediate: true msg: { handler(newVal,oldVal) { console.log('oldVal:',oldVal) console.log('newVal:',newVal) }, immediate: true }, } }; </script>
二,监听对象:
(1)监听对象需要用到深度监听,设置 deep:true
<template> <div id="app"> <div> <button @click="btnClick">触发</button> <div>{{ obj.name }}</div> </div> </div> </template> <script> export default { data() { return { obj: { name: 'coderkey', age: 18 }, } }, methods: { btnClick() { this.obj.name = 'pink' } }, watch: { obj:{ // 注意:属性值发生变化后,handler执行后获取的 newVal 值和 oldVal 值是一样的 handler(newVal,oldVal) { console.log('oldVal:',oldVal) console.log('newVal:',newVal) }, immediate: true, // 开启深度监听 deep deep: true } } }; </script>
(2)可以只监听对象的其中一个属性值 ’对象.属性‘ 的形式
<template> <div id="app"> <div> <button @click="btnClick">触发</button> <div>{{ obj.name }}</div> </div> </div> </template> <script> export default { data() { return { obj: { name: 'coderkey', age: 18 }, } }, methods: { btnClick() { this.obj.name = 'pink' } }, watch: { // 函数执行后,获取的 newVal 值和 oldVal 值不一样 'obj.name'(newVal,oldVal) { console.log('oldVal:',oldVal) // coderkey console.log('newVal:',newVal) // pink }, /* 'obj.name':{ handler(newVal,oldVal) { console.log('oldVal:',oldVal) console.log('newVal:',newVal) }, // 立即处理 进入页面就触发 immediate: true } */ } } </script>
三,监听数组
(1)(一维、多维)数组的变化不需要深度监听
<template> <div id="app"> <div> <button @click="btnClick">触发</button> <!-- <div>{{ obj.name }}</div> --> </div> </div> </template> <script> export default { data() { return { arr1:[1,2,4,5,6] } }, methods: { btnClick() { this.arr1.unshift(0) }, }, watch: { arr1:{ handler(newVal,oldVal) { console.log('oldVal:',oldVal) // [0,1,2,4,5,6] console.log('newVal:',newVal) // [0,1,2,4,5,6] }, // immediate: true, } } } </script>
多维数组
<template> <div id="app"> <div> <button @click="btnClick">触发</button> <!-- <div>{{ obj.name }}</div> --> </div> </div> </template> <script> export default { data() { return { arr1:[1,2,4,[5,6]] } }, methods: { btnClick() { this.arr1.push(0) }, }, watch: { arr1:{ handler(newVal,oldVal) { console.log('oldVal:',oldVal) console.log('newVal:',newVal) }, // immediate: true, } } } </script>
(2)数组对象中对象属性变化监测需要使用 deep:true
深度监听,多少层内产生变化都可以监测到。
<template> <div id="app"> <div> <button @click="btnClick">触发</button> <!-- <div>{{ obj.name }}</div> --> </div> </div> </template> <script> export default { data() { return { arr1: [ { name: 'coderkey', age: 22 } ], arr2: [ { name: 'coderkey', age: 22, children: [ { name: 'why', sex: 33 } ] } ] } }, methods: { btnClick() { this.arr1[0].name = 'pink' this.arr2[0].children[0].name = 'pink' }, }, watch: { arr1: { handler(newVal, oldVal) { console.log('newVal1', newVal); console.log('oldVal1', oldVal); }, deep: true }, arr2: { handler(newVal, oldVal) { console.log('newVal2', newVal); console.log('oldVal2', oldVal); }, deep: true } } } </script>
四,监听路由变化
// 方法一: watch:{ $router(to,from){ console.log(to.path) } } // 方法二: watch: { $route: { handler: function (val, oldVal){ console.log(val); }, // 深度观察监听 deep: true } }, // 方法三: watch: { '$route' : 'getRoutePath' }, methods: { getRoutePath(){ console.log( this .$route.path); } }
总结
到此这篇关于vue2中watch的用法的文章就介绍到这了,更多相关vue2中watch用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
解决创建vue项目后没有vue.config.js文件的问题
这篇文章给大家主要介绍如何解决创建vue项目后没有webpack.config.js(vue.config.js)文件,文中有详细的解决方法,感兴趣的朋友可以参考阅读下2023-07-07
最新评论