vue学习的第四天

本文详细介绍了Vue.js中监视属性(watch)的两种形式,包括基本监视和深度监视,并提供了相应的代码示例。同时,对比了计算属性与监视属性的区别,强调了计算属性在功能上的涵盖性以及watch对于异步操作的支持。此外,还介绍了watch的简写形式以及在处理函数中this指针的注意事项。
摘要由CSDN通过智能技术生成

监视属性

有两种形式

  1.  const vm = new Vue({
             el:'#root',
             data: {
              isHot:true
             },
             computed:{
                info(){
                   return this.isHot?"炎热":"凉爽"
                }
             },
             methods: {
               changeWeather(){
                this.isHot = !this.isHot
               }
             },
             watch:{
             isHot:{
                   immediate:true,
                   handler(newValue,oldValue){
                       console.log('isHot被修改了',newValue,oldValue)
                 }
              }
            }
            })
  2.   const vm = new Vue({
             el:'#root',
             data: {
              isHot:true
             },
             computed:{
                info(){
                   return this.isHot?"炎热":"凉爽"
                }
             },
             methods: {
               changeWeather(){
                this.isHot = !this.isHot
               }
             },
            })
            vm.$watch('info',{
                    immediate:true,
                    handler(newValue,oldValue){
                        console.log('info被修改了',newValue,oldValue)
                    }
        })
        </script>

深度监视

  1. Vue中的watch默认不监测对象内部值的改变(一层)

  2. 配置deep:true可以监测对象内部值改变(多层)

<body>
    <div id="root">
        <h2>今天天气很{{info}}</h2>
        <button @click="changeWeather">点击切换天气</button>
        <h3>a的值是:{{numbers.a}}</h3>
        <button @click="numbers.a++">点我让a+1</button>
        <h3>b的值是:{{numbers.b}}</h3>
        <button @click="numbers.b++">点我让b+1</button>
    </div>
    <script>
    const vm = new Vue({
         el:'#root',
         data: {
          isHot:true,
          numbers:{
           a:1,
           b:1
          },
         },
         computed:{
            info(){
               return this.isHot?"炎热":"凉爽"
            }
         },
         methods: {
           changeWeather(){
            this.isHot = !this.isHot
           }
         },
         watch:{
            numbers:{
                deep:true,
                handler(newValue,oldValue){
                    console.log('isHot被修改了',newValue,oldValue)
                }
            }
         }
        })
       
    </script>
</body>

简写形式

只有一个配置的时候,使用简写形式

有两种简写形式

  1.  正常写法
              watch:{
                numbers:{
                    deep:true,
                   handler(newValue,oldValue){
                       console.log('isHot被修改了',newValue,oldValue)
                   }
               }
            }
             简写
           watch:{
           isHot(newValue,oldValue){
                console.log('isHot被修改了',newValue,oldValue)
            }
        }
  2.  //正常写法
        //    vm.$watch('isHot',{
        //             deep:true,
        //             handler(newValue,oldValue){
        //                 console.log('isHot被修改了',newValue,oldValue)
        //             }
        //    })
      //简写
           vm.$watch('isHot',function(newValue,oldValue){
                        console.log('isHot被修改了',newValue,oldValue)
           })

计算属性与监视属性的区别

  1. computed能完成的功能watch一定能完成。

  2. watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作。

  3. 所被vue管理的函数,最好写成普通函数,这样this的指向才是vm或组件实例对象。

  4. 所有不被vue所管理的函数(定时器的回调函数、ajax的回调函数等、promise的回调函数),最好写成箭头函数,这样this的指向才是vm或者组件实例对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值