zoukankan      html  css  js  c++  java
  • Vue数据监听(watch、computed、keyup)

    1、watch

    watch的使用方法

    (1)简单监听

    (2)深度监听

    (3)监听数据变化并执行某个方法


     (1)简单监听

    watch: {
        mydata(val, newval) {
            console.log(val)
            console.log(newval)
        }
      }

    (2)深度监听

    watch: {
        myData: {
          handler(newVal) {
            this.change_number++
          },
          deep: true
        }
    }

    (3)监听数据变化并执行某个方法

    watch: {
       mydata: 'changeData'  // 值可以为methods的方法名
    },
    methods: {
          changeData(curVal,oldVal){
            conosle.log(curVal,oldVal)
      }
    }

    watch监听数据变化详解见这里:https://www.cnblogs.com/meiyanstar/p/14047456.html

    watch监听路由变化详解见这里:https://www.cnblogs.com/meiyanstar/p/14047622.html

    2、computed计算属性

    在computed中,可以定义一些属性,这些属性叫作计算属性。

    计算属性的本质:就是一个方法,只不过在我们使用这些计算属性的时候,是把它们的名称直接当作属性来使用,并不会把计算属性当作方法去调用。

    注意1:

    • computed和methods平级
    • 计算属性,在引用时,不要加()去调用,直接当作普通属性去使用就好了
    • 只要计算属性的function内部,所用到的任何data中的数据发生了变化,就会重新计算这个计算属性的值。
    <body>
      <div id="app">
          <input type="text" v-model="firstname">+
          <input type="text" v-model="lastname">=
          <input type="text" v-model="fullname">
      </div>
    
    
      <script>
        // 创建 Vue 实例,得到 ViewModel
        var vm = new Vue({
          el: '#app',
          data: {
              firstname: '',
              lastname: '',
          },
          methods: {},
          watch: {},
          computed: {
              'fullname': function(){
                  return this.firstname + '-' + this.lastname
              }
          }
        });
      </script>
    </body>

    注意2:

    • fullname没有在data中定义
    • 在computed定义fullname后直接return出去就好
    • 计算属性的求值结果,会被缓存起来,方便下次直接使用;如果计算属性方法中所有的任何属性都没有发生变化,则不会重新对计算属性求值。

    3、利用keyup事件来实现,结合methods

    在input标签里绑定keyup事件

    <input type="text" v-model="firstname" @keyup="getFullname"> +
    <input type="text" v-model="lastname" @keyup="getFullname"> =
    <input type="text" v-model="fullname">

    var vm = new Vue({
      el: '#app',
      data: {
         firstname: '',
         lastname: '',
         fullname: ''
       },
      methods: {
        getFullname() {
           this.fullname = this.firstname + '-' + this.lastname
        }
      }
    });

     总结对比

    1. watch:主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作;可以看作是computedmethods的结合体
    2. computed:属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。主要当作属性来使用;
    3. methods:方法表示一个具体的操作,主要书写业务逻辑。
  • 相关阅读:
    【题解】Killer Names($O(nlog n)$做法)
    【瞎讲】类欧几里得入土教程
    【题解】SDOI2010所驼门王的宝藏(强连通分量+优化建图)
    【题解】ARC101F Robots and Exits(DP转格路+树状数组优化DP)
    【题解】LOJ6060 Set(线性基)
    【题解】CF1056F Write the Contest(三分+贪心+DP)
    【题解】多少个$1$(exBSGS)
    【题解】幼儿园篮球题(范德蒙德卷积+斯特林+NTT)
    【题解】P1373 小a和uim之大逃离
    【题解】地精部落(DP)
  • 原文地址:https://www.cnblogs.com/meiyanstar/p/14047133.html
Copyright © 2011-2022 走看看