监听属性

前提

我们根据前面学过的知识,今天点击一个按钮,页面上面的数据进行变化,直接给按钮一个点击事件,写法是

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript" src="../js/vue.js"></script>

    <style> .div1{
      width: 100px; height: 50px; background-color: aquamarine; } .div2{
      width: 90px; height: 20px; background-color: blueviolet; } .list{
      width: 200px; height: 200px; background-color: blueviolet; overflow: auto; } li{
      height: 100px; } </style>
</head>
<body>
    <div id="root">
        <h2> 天气{
  {info}}</h2>
        <button @click = "changemet">切换天气</button>

    </div>

   
    <script > Vue.config.productionTip = false new Vue({
      el: '#root', // data:function(){
      return{
      isHot:true } }, computed:{
      info(){
      return this.isHot ? '炎热' : '凉爽' } }, methods:{
      changemet(){
      this.isHot = !this.isHot } } }) </script>
</body>
</html>

以上的代码我们不仅仅使用了计算属性,还用了方法,我们可以将方法去掉,直接这样写


但是这是简单的逻辑,可以这样写,如果逻辑多,一定不要这样写,可以这样写,以分号的形式隔开,但是没人这样写。

使用监视属性的代码(第一种方法监视)

上面那个例子,没有使用监视属性,现在进行使用

监视也就是监视data里面变量的变化。就是我们不需要点击某一个按钮进行变化了,现在是只要data里面的数据变化,那么就可以执行一定的逻辑

使用的场景:

当一个data数据变化之后,我们可以拿到变化之前的数据和变化之后的数据,进行对比之后进行后续的操作,比如对变化的温度,当变化超过30度,就开始进行预警。

也就是在watch这个属性里面的和data同名的配置里面,有很多的属性
第一个是handler

handler


只要data里面的变量变化,就会执行这个里面的逻辑

immediate

deep

第二种方法监视

监视的范围

不仅仅监视data里面的数据的变化,而且还可以监视 计算属性的变化

总结

监听多级结构中某个属性的变化

我们data里面的数据是一个对象咋办,比如


我们只是要监听a变化之后,要有一定的操作,不监听b


以上是多级里面只有几个属性,现在要有一百个,咋办,所以,我们要这样写


只要numbers这个对象里面一个属性变化,那么就可以监听到了。

也就是监听所有数据,深度监听

监视属性的简写方式

当配置项里面只是需要handler的时候,才可以开启简写方式,如果有其他的,比如deep属性,那么就不可以进行简写

简写方式:

计算属性和 监听属性的区别

两个都可以实现具体的功能,大多数的功能随便选择一个就可以实现。那么两个有什么具体的区别呢?

计算属性里面不能开启异步任务,监听属性是可以的。

比如数据变化之后,等几秒才有操作,那么只能使用监听属性

总结

为什么vue项目里面的定时器,一般写成箭头函数,其他的写成普通函数

是浏览器调用定时器函数,如果写成普通函数,那么这个定时器里面是有this的,这个this指的是window,如果写成箭头函数,里面就找不到this了,只能向外找。外面的函数的this是谁,里面的就是谁。

所以,vue项目里面的定时器,一般写成箭头函数,其他的写成普通函数