vue 监听属性 watch

监听属性watch:

        1、当被监听属性变化时,回调函数自动调用,进行相关操作。

        2、监听的属性必须存在,才能进行监听。

        3、监听的两种写法:

                (1):在vue实例中传入watch配置。

                (2):通过vue实例对象vm使用.$watch监听。

 具体例子:(注释解释说明)

<body>
    <div class="a" id="a">
        省:<input type="text" v-model.lazy="province"> <br><br>
        市:<input type="text" v-model.lazy="city"> <br><br>
        位置:<span>{{ area }}</span> <br><br>
        修改位置:<input type="text" v-model.lazy="area"> <br><br>
        <hr>
        随行人数: <input type="text" v-model.lazy="number.a"> <br><br>
        <hr>
        前往地区:<input type="text" v-model.lazy="place">
    </div>
    <script>
        var vm = new Vue({
            el: '#a',
            data: {
                province : '吉林',
                city : '长春',
                number: {
                    a:5,
                    b:0,
                },
                place:'快乐星球',
            },
            //计算属性
            computed:{
                area:{
                    get(){
                    console.log('get方法被调用')
                    return this.province + '-' + this.city
                    },
                    set(area){
                        console.log('set方法被调用')
                        const arr = area.split('-')
                        this.province = arr[0]
                        this.city = arr[1]
                        
                    }
                }},
            //监视属性
            watch:{
                //监听计算属性/一级属性
                area:{
                    handler(newValue,oldValue){
                        console.log('area被修改',newValue,oldValue)
                    }
                },
                //监听多级属性
                number:{
                    immediate:true,   //初始化调用handler一次
                    deep:true,    //深度监视
                    handler(){
                        console.log('number被修改')
                    }
                },
                //监听简写   简写方法没有immediate,deep等配置项
                city(newValue,oldValue){
                    console.log('city被修改',newValue,oldValue)
                },
            },
        }
        );
        //不在vue实例下的监视方法
        vm.$watch('province',{
            handler(newValue,oldValue){
                console.log('province被修改',newValue,oldValue)
            }
        });
        //不在vue实例下的简写方法,简写方法没有immediate,deep等配置项
        vm.$watch('place',function(newValue,oldValue){
            console.log('place被修改',newValue,oldValue)
        })

    </script>
</body>

 网页初始状态:

        位置由计算属性将省和市通过'-'连接得到,所以初始时即调用了get函数。

点击查看计算属性简单例子

        其他属性均通过{{}}插值法实现

        number监听被触发,因为immediate:true配置会在初始时调用handler方法一次,同时number为多级结构,在vm实例中只能监听到number对象而我们监听的是number对象下的a属性,所以需要深度监听所以在配置项中添加了deep:true配置,实现多级监听,否则无法监听到a属性的变化。

 在这里我们将上图位置信息中的城市由长春修改为了白城,所以计算属性中的set方法被调用更改了市的信息所以get方法也被调用将市的展示信息改变,此时触发了city监听。因为位置信息被改变所以触发area属性监听。

 同理修改其他输入框的信息同时触发对应的监听事件,监听事件在对应代码位置展示。

搞技术小窍门: v-model使用.lazy修饰符

.lazy修饰符:当添加.lazy修饰符之后,改变input框中的内容并不会使得双向绑定的属性数据立刻发生变化,而是当输入框失去焦点后改变绑定属性的数据。

举个小例子,我们将省绑定v-model,将市的v-model添加.lazy修饰符,观察一下区别。

 我们修改省和市信息添加三次数据1,2,3(光标不离开输入框),发现没有添加修饰符的监听事件被触发了三次,修改一下触发一次,而添加了修饰符的只被触发了一次监听事件,是在我们最终修改完成才触发。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue.js中的监听watch是一个用于监听Vue实例中数据变化的功能。通过使用watch选项,我们可以指定要监听的数据属性,并在它们发生变化时执行特定的操作。 watch选项可以是一个对象,其中每个属性都是要监听的数据属性,而值可以是一个函数或一个对象。 当值是一个函数时,它会接收两个参数:新值和旧值。在函数内部,我们可以根据需要执行任何操作,比如发送异步请求、计算属性、触发其他方法等。 当值是一个对象时,我们可以使用不同的钩子函数来定义要在特定情况下执行的操作。常用的钩子函数包括: - immediate:在监听开始之后立即执行一次回调函数。 - handler:回调函数,当监听属性发生变化时触发。 - deep:深度监听,当监听属性内部发生变化时也会触发回调函数。 - immediate和deep可以一起使用。 下面是一个使用watch的示例: ```javascript data() { return { message: '', count: 0 } }, watch: { message(newVal, oldVal) { console.log('message changed:', newVal, oldVal); }, count: { handler(newVal, oldVal) { console.log('count changed:', newVal, oldVal); }, immediate: true, deep: true } } ``` 在上面的示例中,我们监听了message和count两个属性。当message发生变化时,会执行相应的回调函数。而对于count属性,我们使用了一个对象来定义监听,设置了immediate为true,表示在监听开始之后立即执行一次回调函数;设置了deep为true,表示深度监听count属性内部的变化。 总的来说,watch是一个非常有用的功能,可以帮助我们在数据变化时执行相应的操作,实现更精细的控制和逻辑。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想搞技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值