Vue之监听数据变化watch、computed、methods

一、业务场景:前两个文本框中输入值,最后一个文本框自动监听前面输入的值

 方式一:使用事件绑定机制@keyup,在methods中写入监听方法

<body>
    <div id="app">
        firstName:<input type="text" v-model="firstname" @keyup="getFullName">+
        lastName<input type="text" v-model="lastname" @keyup="getFullName2">=
        <input type="text" v-model="fullname" >
        <p>{{fullname}}</p>
    </div>

    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                firstname: '',
                lastname: '',
                fullname: ''
            },
            methods: {
                getFullName(){
                    this.fullname = this.firstname + this.lastname
                },
                getFullName2(){
                    this.fullname = this.firstname + this.lastname
                }
            }
        })
    </script>
</body>

方法二:使用watch监听文本变化

使用watch属性 可以监视data中指定数据的变化 然后触发这个watch中对应的处理方法

<body>
    <div id="app">
        <input type="text" v-model="firstname" >+
        <input type="text" v-model="lastname" >=
        <input type="text" v-model="fullname" >
    </div>

    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                firstname: '',
                lastname: '',
                fullname: ''
            },
            methods: {},
            watch: { //使用这个属性 可以监视data中指定数据的变化 然后触发这个watch中对应的处理方法
            //firstname可加 可不加引号 但如果是first-name 必须要加引号
               firstname: function(newVal, oldVal){
                  console.log('监视变化')
                  this.fullname = newVal + '-' + this.lastname
            },
                lastname: function (newVal) {
                    this.fullname = this.firstname + '-' + newVal
                }
            }
        })
    </script>
</body>

方法三:使用computed计算文本值

在computed中可以定义一些属性 这些属性叫【计算属性】 计算属性的本质就是一个方法,只不过在使用这些计算属性的时候 就把他们的名称当做属性来使用

注意:

  1. 计算属性(方法)在引用时一定不要加() 直接把它当做普通属性去使用就好了
  2. 只要计算属性这个function内部所用到的任何data中的数据发生了变化 就会重新计算这个计算属性的值
  3. 计算属性的求职结果会被保存起来 方便下次直接使用 如果计算属性方法中所依赖的任何数据都没有发生变化 则不会重新对计算属性 求职 这个可以提高运行效率
  4. 计算属性中必须有return
<body>
    <div id="app">
        <input type="text" v-model="firstname" >+
        <input type="text" v-model="lastname" >=
        <input type="text" v-model="fullname" >
        <p>{{fullname}}</p>
    </div>

    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                firstname: '',
                lastname: ''
            },
            methods: {},
            computed: {
                
                fullname: function () {
                    console.log('计算fullname被调用次数')
                    return this.firstname + '-' + this.lastname
                }
            }
        })
    </script>
</body>

二、三种方法之间的比较

  1. computed属性会被缓存 除非依赖的响应式属性变化才会重新被计算 主要当做属性来使用
  2. methods方法表示一个具体的操作 主要书写业务逻辑
  3. watch一个对象 键是需要观察的表达式 值是对应的回调函数 主要用来监听某些特定数据的变化 从而进行某些具体的业务逻辑操作 可以看做是computed和methods的结合体
原文地址:https://www.cnblogs.com/ella-li/p/14722611.html