• 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:方法表示一个具体的操作,主要书写业务逻辑。
  • 相关阅读:
    HTML5画图板PhoneGap移植
    简易WCF负载均衡方案
    坑爹的“类型初始值设定项引发异常”
    关于for循环中变量定义的位置
    有道云笔记open api sdk for .net α版
    SL/WPF仿WIN8进度条
    HTML5做个画图板
    Google搜索命令“site:”运算符高级使用技巧:
    ubuntu系统托盘不显示ibus输入法图标(语言栏输入法)的解决方法:
    DOS中如何删除文件夹~
  • 原文地址:https://www.cnblogs.com/meiyanstar/p/14047133.html
Copyright © 2020-2023  润新知