vue的侦听器及怎么侦听数组

news/2024/7/10 0:58:06 标签: vue

作用

侦听属性 响应数据的变化,当数据发生改变的时候 会立即执行对应的函数。

<body>
    <div id="test">
        <input type="text" v-model="entry">
    </div>
    <script>
        let vm = new Vue({
            el: "#test",
            data: {
                entry: ""
            },
            watch: {
                entry() {
                    console.log("侦听到了");
                }
            }
        })
    </script>
</body>

在这里插入图片描述

这里我同过侦听器和v-model指令一起用可以更直观的体现他的作用(这也是常用搭配)。

原理:当input输入内容后,因为v-model指令的绑定,此时entry属性值会随之变化。侦听器在侦听到了entry属性变化后触发侦听事件打印 “侦听到了”。

侦听事件的参数

侦听器在侦听到属性值改变后,会触发一个侦听事件,此事件可以有两个参数。

    1.newval   更改后的数据
    2.oldval   更改前的数据

注意:这两个参数的名字不能变,第一个必须是newval第二个必须是oldval,否则会报错

<body>
    <div id="test">
        <input type="text" v-model="entry">
    </div>
    <script>
        let vm = new Vue({
            el: "#test",
            data: {
                entry: ""
            },
            watch: {
                entry(newval,oldval) {
                    console.log(newval);
                    console.log(oldval);
                    console.log("----------------分割线-----------------");
                }
            }
        })
    </script>
</body>

在这里插入图片描述
输入第一个数“1”的时候,由于没有旧数据,所以打印出来的是空字符串

深度侦听

作用:侦听到引用类型的内部属性值的变化(普通侦听无法直接侦听到对象、数组里面的某个值的变化)

如下代码:不使用深度侦听去侦听引用类型的值

    <span id="test">侦听的值:{{ val }}</span>
    <script>
        let vm = new Vue({
            el:"#test",
            data:{
                val:{a:"第一个值",b:"第二个值"}
            },
            watch:{
                val(){
                    console.log("侦听到了");
                }
            }
        })
    </script>

在这里插入图片描述

可以看到,改变了引用类型的属性值虽然页面渲染了,但侦听并未触发

如果想要侦听到首先得了解handler、deep

handler 方法就相当于普通侦听器触发的事件
deep 方法标志这是一个深度侦听

修改代码成如下

    <span id="test">侦听的值:{{ val.a }}</span>
    <script>
        let vm = new Vue({
            el:"#test",
            data:{
                val:{a:"第一个值",b:"第二个值"}
            },
            watch:{
                val:{
                    handler(){
                        console.log("侦听");
                    },             
                    deep:true
                }
            }
        })
    </script>

在这里插入图片描述
打印出了“侦听两字”,代表侦听成功

侦听数组
数组是无法直接被侦听和渲染的,即便是加了deep也无法渲染或则侦听,但我们可以通过侦听其他属性的值这种方法来改变数组的值达到同步渲染的效果。

    <span id="test" :key="ke">侦听的值:{{ val }}</span>
    <script>
        let vm = new Vue({
            el:"#test",
            data:{
                val:["第一个值","第二个值"],
                ke:0
            },
            watch:{
                ke(){
                    this.val[0]="123"
                }
            }
        })
    </script>

在这里插入图片描述
immediate属性
作用:加载页面时,直接执行侦听事件


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

相关文章

android 串口调试工具_只需几行代码 ESP32秒变无线串口调试神器

串口调试工具对于广大电子工程师和电子爱好者来说再熟悉不过了&#xff0c;常见的有USB转TTL串口线&#xff0c;另外还有一些无线串口调试工具&#xff0c;通过蓝牙、2.4G、WIFI等方式实现串口数据无线透传。无线连接方式省去了线缆的束缚&#xff0c;带来的好处也是不言而喻的…

numpy 拼接_numpy回顾小结(二)

上一篇&#xff1a;橘猫吃不胖&#xff1a;numpy回顾小结&#xff08;一&#xff09;​zhuanlan.zhihu.com函数numpy中&#xff0c;定义了很多的函数&#xff0c;常用的数学函数&#xff0c;比如&#xff1a;np.sin(a) np.sqrt(a)聚合函数除了数学函数&#xff0c;还有聚合函数…

vue的计算属性computed

计算属性 1.作用&#xff1a; 数据可以进行逻辑处理操作对计算属性中的数据进行监视。 2.计算属性和普通属性的区别&#xff1a; 计算属性是基于它的依赖进行更新的&#xff0c;只有在相关依赖发生改变时才能更新变化计算属性是缓存的&#xff0c;只要相关依赖没有改变&…

个人博客小程序源码_别人家程序员都有个人博客了 你呢?快进来,教你打造个人博客...

因为头条排版的原因&#xff0c;图片我就不放了&#xff0c;看此文章&#xff0c;可能会看不懂&#xff0c;请直接查看底部了解更多安装nodenode下载地址&#xff1a;http://nodejs.cn/download/具体安装方法&#xff0c;这里不做详写安装完成可以通过node -v 查看安装是否生效…

vue的组件和prop

组件基础 组件的作用 组件是可复用的vue实例&#xff0c;且带有一个名字。 组件就是我们自定义的一个元素 但是要注意的是&#xff1a;必须用在vue的模版中使用 全局组件 全局组件挂载&#xff1a;实例化一个vue对象&#xff0c;建立一个组件&#xff0c;然后挂载 注意下面…

macos 全局快捷键 打开 iterm_Mac必备的20大快捷键,速成Mac老司机

回想第一次使用 macOS &#xff0c;找不到关机键&#xff0c;没事还在桌面点右键找刷新。作为 10 年的 Windows 党表示真的很脸红&#xff0c;不同操作系统的操作习惯相差还是巨大的&#xff0c;好在小编现在是 macOS 和 Windows 双修了。所以小编还是觉得最简单也是最实用的。…

vue的插槽

最简单的使用 <div id"father"><zyl-mew>12312</zyl-mew></div><script>Vue.component(zyl-mew,{template:<div><slot></slot></div>})let vmnew Vue({el:"#father"})</script>可以看到通过s…

python3.7安装包多大_安装python 3.7

一、安装依赖包 yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make 二、再执行安装一个工具&#xff0c;不安装会导致pip安装失败 yum install libffi-devel -y 三、下载python3.7的包&#xff0c;有两种方法&am…