Vue知识点总结(6)——侦听器watch(超级详细)

news/2024/7/10 1:48:46 标签: vue, javascript, html, 前端

这期主题是watch侦听器
我们在实际开发的时候,对于动态网页而言,大部分的数值都是在不断变化的,如果我们需要侦听某些数值的变化,用来做出对应处理,watch侦听器是个再好不过的选择。

html"><div id="app">
    <input type="text" v-model='msg'>
    <h3>{{msg}}</h3>
</div>
html" title=javascript>javascript"><script>
    var app = new Vue({
        el:'#app',
        data:{
            msg:''
        },
        watch:{
            'msg':function(newV,oldV){
                console.log('newV',newV);
                console.log('oldV',oldV);
                if(newV === '100')
                {
                    alert('Hello!');
                }
            },
        }
    });

我们照常,写了一个input输入框,一个h3标签用来绑定输入框的值。
在这里插入图片描述
然后在Vue实例中,我们写了一个和data同级的watch属性,然后以键值对的形式写了一些行为处理。
’msg‘就是data中对象的属性名,即key。
后面的function就是value,我们侦听到数值变化后,进行处理的行为。
两个参数,newV就是目前最新的值,oldV就是变化之前的旧值。

然后我们打开F12,看一下。
在这里插入图片描述
初始值是1,我们在输入框输入10后,控制台分别输出了新值和旧值,这样我们就完成了数值的侦听,也可以做出对应的处理,比如我们输入100
在这里插入图片描述
因为我们在function中写了,如果newV是100,我们就给一个提示框。

这只是基本的数据类型的侦听,如果是复杂的数据类型,比如Object/Array呢。
Vue相应也给我们提供了深度的侦听

html"><div id="app">
    <h3>{{obj[0].name}}</h3>
    <button @click='obj[0].name = "CreatorRay" '>改变</button>
</div>
html" title=javascript>javascript"><script>
    var app = new Vue({
        el:'#app',
        data:{
            obj:[{name:'Ray'}]
        },
        watch:{
            'obj':{
                deep:true,
                handler(newV,oldV){
                    console.log('newV',newV);
                    console.log('oldV',oldV);
                    
                },

            }
        }
    });

语法格式很类似,这次我们写了一个h3标签初始值是一个data中的对象属性obj,还有一个button用来改变h3绑定的属性值。
watch属性中,我们看到形式依然是一个键值对的方式,但是值中我们包了一个大括号,并且除了处理函数外,还加了一句deep:true,这句就是深度侦听的标志。
我们来试一下效果:
不点按钮之前:
在这里插入图片描述
点按钮之后:
在这里插入图片描述
确实侦听到了对象数值的变化,但是我们可以看到newV和oldV的值是相同的,这是咋回事呢?
其实Vue的官网已经提到了这一点。

注意:在变异 (不是替换) 对象或数组时,旧值将与新值相同,因为它们的引用指向同一个对象/数组。Vue 不会保留变异之前值的副本。

这个问题就比较深入了,其实这种情况也有解决的办法,可以通过计算属性来处理,我一会儿单独出一期解决办法。

这里其实还有一个知识点,深度侦听中还有一个属性,immediate可以设置是不是立即返回
我们如果不写这个属性,只有我们点击按钮之后才会触发深度侦听的事件,写上这个立即返回属性并且赋值为true之后,即使我们还没点击按钮,它也会先侦听一次,在有些业务场景下,这个属性是很实用的。
这里我就不做演示了,大家可以自己试一下。

有微信小程序课设、毕设需求联系个人QQ:505417246

关注下面微信公众号,可以领取微信小程序、Vue、TypeScript、前端、uni-app、全栈、Nodejs、Python等实战学习资料
最新最全的前端知识总结和项目源码都会第一时间发布到微信公众号,请大家多多关注,谢谢!

在这里插入图片描述


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

相关文章

Vue进行深度侦听时,如何解决新旧值一样的问题?

Vue在进行数值/对象等复杂数据类型的深度侦听时&#xff0c;如果不稍加处理&#xff0c;深度侦听的新旧值会一模一样&#xff0c;影响有些业务的处理。 在上一篇博客中我已经把场景阐述清楚了&#xff0c;这期就只写处理办法&#xff0c;沿用上期代码。 只需要添加一个计算属性…

Vue知识点总结(7)——计算属性computed(超级详细)

这期的主题是Vue的计算属性computed。 我们都知道插值表达式{{}}&#xff0c;{{}}可以实现双向的数据绑定&#xff0c;并且可以在其中进行一些常规的算数运算和逻辑运算。 但是模板内的表达式非常便利&#xff0c;但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会…

NUC1019 数素数【素数筛选法】

数素数 时间限制: 1000ms 内存限制: 65536KB 问题描述素数是的只能被1和它本身整除的自然数。判断一个数是素数的方法是使用2到该数的平方根的素数除它&#xff0c;若有能整除的则该数不是素数。输入描述本题有多组数据&#xff0c;每组数据由两个正整数M,N组成。&#xff08; …

Vue知识点总结(8)——filter过滤器(超级详细)

Vue.js 允许你自定义过滤器&#xff0c;可被用于一些常见的文本格式化。过滤器可以用在两个地方&#xff1a;双花括号插值和 v-bind 表达式 (后者从 2.1.0 开始支持)。过滤器应该被添加在 JavaScript 表达式的尾部&#xff0c;由“管道”符号指示。 Vue为我们提供了两种过滤器的…

微信小程序云开发实现分页功能(简单易懂)

我们在页面上进行数据展示的时候&#xff0c;无论是pc端还是移动端&#xff0c;很多情况下需要展示很多很多条的数据。 比如商城&#xff0c;商品的数量是非常多的。但是在我们从后台获取数据的时候&#xff0c;数据的传输数量总是有限制的&#xff0c;这也是为了性能考虑&…

Vue知识点总结(9)——局部组件的创建和使用(超级详细)

为什么要组件化开发&#xff1f; 有时候页面代码量太大&#xff0c;逻辑太多或者同一个功能组件在许多页面均有使用&#xff0c;维护起来相当复杂&#xff0c;这个时候&#xff0c;就需要组件化开发来进行功能拆分、组件封装&#xff0c;已达到组件通用性&#xff0c;增强代码可…

JS如何删除数组中指定的内容

如何删除数组中的指定内容&#xff1f; 主要是对splice函数的应用&#xff0c;这个函数很强大&#xff0c;用处非常多。 我们分两种情况处理问题&#xff1a; ①删除数组中的一个指定元素。 array数组中只有一个值为1的元素&#xff0c;我们的任务就是删除这个值为1的元素。 va…

Activiti实战. 1.1什么是Activiti

1.1什么是Activiti 大家第一次接触Activiti的时候不理解它为什么要叫这个名字&#xff0c;从词典中也没有找到对它的解释。可能有人会想到另外一个单词Activity&#xff08;活动&#xff09;&#xff0c;与Activiti仅一个字母之差。在工作流方面有些基础的读者或许能很快理解&a…