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属性
作用:加载页面时,直接执行侦听事件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值