首页 > 其他分享 >Vue学习笔记16--监视属性watch + 深度监视 + 监视简写

Vue学习笔记16--监视属性watch + 深度监视 + 监视简写

时间:2024-02-26 17:35:28浏览次数:25  
标签:Vue console log 16 watch isHot oldValue 监视

监视属性watch

示例一:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>计算属性</title>
  <script type="text/javascript" src="../Js/vue.js"></script>
</head>

<body>
  <div id="root">
    <!-- <h2>今天添加很--{{ishot?'炎热':'凉爽'}}</h2>
    <hr> -->
    实现方式一:
    <button @click="changeWeather">切换天气1</button>
    <h2>今天天气很--{{wetherInfo}}1</h2>
    <hr>
    实现方式二:
    <button @click="isHot=!isHot">切换天气2</button>
    <h2>今天天气很--{{wetherInfo}}2</h2>
  </div>
</body>

</html>
<script type="text/javascript">
  //console.log(vm)
  const vm = new Vue({
    el: '#root',
    data: {
      isHot: true,
    },
    computed: {
      wetherInfo () {
        return this.isHot ? '炎热' : '凉爽'
      }
    },

    methods: {
      changeWeather () {
        this.isHot = !this.isHot
      },


    },
  })
</script>

 示例二:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>监视属性watch</title>
  <script type="text/javascript" src="../Js/vue.js"></script>
</head>

<body>
  <div id="root">
    实现方式一:
    <button @click="changeWeather">切换天气1</button>
    <h2>今天天气很--{{wetherInfo}}1</h2>
    <hr>
  </div>
</body>

</html>
<script type="text/javascript">
  //console.log(vm)
  const vm = new Vue({
    el: '#root',
    data: {
      isHot: true,
    },
    computed: {
      wetherInfo () {
        return this.isHot ? '炎热' : '凉爽'
      }
    },

    methods: {
      changeWeather () {
        this.isHot = !this.isHot
      },


    },
    // watch 监视
    watch:
    {
      // 监视普通属性
      isHot: {
        immediate: true,//初始化时让handler调用一下
        handler (newValue, oldValue) {//当属性被更改时,调用
          console.log('isHot 被修改了' + this.isHot)
          console.log(newValue + ' isHot被修改了 ' + oldValue)
        }
      },
      // 监视计算属性
      wetherInfo: {
        immediate: true,//初始化时让handler调用一下
        handler (newValue, oldValue) {//当属性被更改时,调用
          console.log(' wetherInfo 被修改了 ' + this.isHot)
          console.log(newValue + ' wetherInfo 被修改了 ' + oldValue)
        }
      },
    }

  })

  // vm对象监视
  vm.$watch('wetherInfo', {
    immediate: true,//初始化时让handler调用一下
    handler (newValue, oldValue) {//当属性被更改时,调用
      console.log(newValue + ' wetherInfo 被修改了--vm对象监视  ' + oldValue)
    }
  })
</script>

 总结:监视属性watch

  1. 当被监视属性变化时,回调函数自动调用,进行相关操作
  2. 监视的属性必须存在,才能进行监视
  3. 监视的两种写法:
    • new Vue时,使用传入watch配置
    • 通过vm对象 vm.$watch方式监视

深度监视

  1. Vue的watch默认不监测对象内部值的改变(一层)
  2. 配置deep:true可以监视对象内部值的改变(多层)

备注:

  1. Vue自身可以监测对象内部值的改变,但Vue提供的wathc默认不可以
  2. 使用watch时根据数据的具体结构,决定是否采用深度监视
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>深度监视属性watch</title>
  <script type="text/javascript" src="../Js/vue.js"></script>
</head>

<body>
  <div id="root">
    实现方式一:
    <button @click="changeWeather">切换天气1</button>
    <h2>今天天气很--{{wetherInfo}}1</h2>
    <hr>
    <h2>x的值是:{{numbers.x}}</h2>
    <button @click="numbers.x++">点我x++</button>
    <hr>
    <h2>y的值是:{{numbers.y}}</h2>
    <button @click="numbers.y++">点我y++</button>

  </div>
</body>

</html>
<script type="text/javascript">
  //console.log(vm)
  const vm = new Vue({
    el: '#root',
    data: {
      isHot: true,
      numbers: {
        x: 1,
        y: 1,
      }
    },
    computed: {
      wetherInfo () {
        return this.isHot ? '炎热' : '凉爽'
      }
    },

    methods: {
      changeWeather () {
        this.isHot = !this.isHot
      },


    },
    // watch 监视
    watch:
    {
      // 监视多级结构中某个属性的变化
      'numbers.x': {
        handler () {//当属性被更改时,调用
          console.log(' numbers.x 被修改了')
        }
      },
      // 监视多级结构中所有属性的变化
      numbers: {
        deep: true,
        handler () {//当属性被更改时,调用
          console.log('numbers 被修改了')
        }
      },

      // 监视普通属性
      isHot: {
        immediate: true,//初始化时让handler调用一下
        handler (newValue, oldValue) {//当属性被更改时,调用
          console.log('isHot 被修改了' + this.isHot)
          console.log(newValue + ' isHot被修改了 ' + oldValue)
        }
      },
      // 监视计算属性
      wetherInfo: {
        immediate: true,//初始化时让handler调用一下
        handler (newValue, oldValue) {//当属性被更改时,调用
          console.log(' wetherInfo 被修改了 ' + this.isHot)
          console.log(newValue + ' wetherInfo 被修改了 ' + oldValue)
        }
      },
    }

  })


</script>

 

监视简写:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>监视属性简写</title>
  <script type="text/javascript" src="../Js/vue.js"></script>
</head>

<body>
  <div id="root">
    <h2>今天天气很--{{wetherInfo}}</h2>
    <button @click="changeWeather">切换天气</button>

  </div>
</body>

</html>
<script type="text/javascript">
  //console.log(vm)
  const vm = new Vue({
    el: '#root',
    data: {
      isHot: true,

    },
    computed: {
      wetherInfo () {
        return this.isHot ? '炎热' : '凉爽'
      }
    },
    methods: {
      changeWeather () {
        this.isHot = !this.isHot
      },
    },
    // watch 监视
    watch:
    {
      // 监视普通属性  
      /* 正常写法
      isHot: {
        // immediate: true,//初始化时让handler调用一下
        // deep: true,//深度监视
        //简写方式 只能有 handler 不能有其他设置,如上代码deep: true,存在的话,则不可简写
        handler (newValue, oldValue) {//当属性被更改时,调用
          console.log('isHot 被修改了' + this.isHot)
          console.log(newValue + ' isHot被修改了 ' + oldValue)
        }
      }, */

      // 简写
      isHot (newValue, oldValue) {
        //简写方式 只能有 handler 不能有其他设置,如上代码deep: true,存在的话,则不可简写
        // console.log('isHot 被修改了' + this.isHot)
        console.log(newValue + ' isHot被修改了 ' + oldValue)

      },
    }

  })

  // 完整写法  vm对象监视 
  /*   vm.$watch('isHot', {
      immediate: true,//初始化时让handler调用一下
      deep: true,//深度监视
      handler (newValue, oldValue) {//当属性被更改时,调用
        console.log(newValue + ' isHot 被修改了--vm对象监视  ' + oldValue)
      }
    }) */

  // 简写
  // vm.$watch('isHot', function (newValue, oldValue) {
  //   console.log(newValue + ' isHot 被修改了--vm对象监视  ' + oldValue)
  // })

</script>

  

标签:Vue,console,log,16,watch,isHot,oldValue,监视
From: https://www.cnblogs.com/YYkun/p/18034374

相关文章

  • ubuntu16 安装cmake
    CMakedeveloperteaminKitwareIncprovidesAPTrepositiory.ItallowsyoutoinstalllatestCMakeviaapt-get.IfyouareusingaminimalUbuntuimageoraDockerimage,youmayneedtoinstallthefollowingpackages:sudoapt-getupdatesudoapt-getin......
  • uniapp nvue页面 map地图全屏设置
    因为nvue页面:100vh以及百分比不可用,所以1,可以获取当前屏幕高度然后赋值<map:latitude="latitude":longitude="longitude":style="'height:'+windowHeight*2+'rpx;'"></map>const{windowWidth,windowHeight,appName}=......
  • 2016-07-30-Android中的类加载器及类加载流程
    Android中的类加载器及类加载流程Android中的类加载器有三种,DexClassLoader、PathClassLoader、BootClassLoader。其中BootClassLoader是系统启动时预加载常用类的,一般使用不到。DexClassLoader、PathClassLoader都是继承自BaseDexClassLoader。但DexClassLoader和PathClassLo......
  • vite+vue3 import批量导入图片
    vite+vue3import批量导入图片主要使用“import.meta.glob”方法。具体使用如下:1.constlist=import.meta.glob("../../static/images/left-image/*.*",{eager:true})2.imageList=Object.values(list).map((v:any)=>v.default);3.页面使用   ......
  • Vue 学习笔记15--用户代码片段
    { //Placeyour全局snippetshere.Eachsnippetisdefinedunderasnippetnameandhasascope,prefix,bodyand //description.Addcommaseparatedidsofthelanguageswherethesnippetisapplicableinthescopefield.Ifscope //isleftemptyor......
  • MDC300-16-ASEMI电源控制柜MDC300-16
    编辑:llMDC300-16-ASEMI电源控制柜MDC300-16型号:MDC300-16品牌:ASEMI封装:M25最大重复峰值反向电压:1600V最大正向平均整流电流(Vdss):300A功率(Pd):大功率芯片个数:6引脚数量:5类型:整流模块、整流桥正向浪涌电流:600A正向电压:1.35V最大输出电压(RMS):封装尺寸:如图工作温度:-40......
  • vue页面上显示package.json中的version
    在Vue项目中,你可以使用process.env来访问构建时注入的环境变量,包括package.json中的某些字段。但是,process.env通常不会直接包含package.json的所有内容。不过,你可以通过构建脚本将version字段注入到环境变量中。以下是如何在Vue项目中获取package.json中的version字段的步骤:在......
  • vue项目npm run build的时候自动更新package.json中的version
    在vue项目最外侧新增一个addVersion.js 脚本,脚本中编写逻辑来解析当前的版本号//addVersion.jsconstfs=require('fs');constpath=require('path');constpackageJsonPath=path.join(__dirname,'package.json');try{//读取package.json......
  • Vue实现图片瀑布流
    在线演示地址:点击前往一,创建一个Waterfall组件代码如下:<template><divclass="waterfall"><!--循环渲染每一列--><divclass="waterfall-column"v-for="(column,index)incolumns":key="index"><!--......
  • 【2024-02-16】连岳摘抄
    23:59要紧的是,我们首先应该善良,其次要诚实,再其次是以后永远不要互相遗忘。                                                 ——陀思妥耶夫斯基读书是为了获得理论(......