美文网首页
vue的计算属性和侦听器

vue的计算属性和侦听器

作者: 紫气楠楠 | 来源:发表于2019-12-03 12:28 被阅读0次

    计算属性

    理解

    1、computed用来监控自己定义的变量,该变量不在data里面声明,直接在computed里面定义,然后就可以在页面上获取到并进行相应的数据处理

    2、computed里可以完成各种复杂的逻辑,包括运算、函数调用等,只要最终返回一个结果就可以。


    案例:

    <template>
        <div @click='add'> + </div>
    </template>
    
    data(){
        return{
            num1: 11,
            num2: 33
        }
      },
      computed:{
          total:function(){
          return this.num1 + this.num2 //总分会随着num1,num2的变化而重新计算
        },
      },
      methods:{
          add(){
              this.num1++
          }
      }
    

    上面案例中total返回的是num1和num2的总和,且每次点击加号时total的值都会随着num1的变化而变化,由此可知计算属性可以依赖多个Vue 实例的数据,只要其中任一数据变化,计算属性就会重新执行,视图也会更新。

    计算属性的setter

    计算属性默认只有 getter ,不过在需要时你也可以提供一个 setter :

    computed: {
      fullName: {
        // getter
        get: function () {
          return this.firstName + ' ' + this.lastName
        },
        // setter
        set: function (newValue) {
          var names = newValue.split(' ')
          this.firstName = names[0]
          this.lastName = names[names.length - 1]
        }
      }
    }
    

    现在再运行 vm.fullName = 'John Doe' 时,setter 会被调用,vm.firstName 和 vm.lastName 也会相应地被更新。

    侦听器 watch

    虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。
    当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的

    例如:

    <div id="watch-example">
      <p>
        Ask a yes/no question:
        <input v-model="question">
      </p>
      <p>{{ answer }}</p>
    </div>
    
    watch: {
        // 如果 `question` 发生改变,这个函数就会运行
        question: function (newQuestion, oldQuestion) {
          this.answer = 'Waiting for you to stop typing...'
        }
      },
    

    当我们监听的数据发生变化时,相应的函数就会运行,这个函数的第一个参数是变化的值,第二个参数是原来的值

    相关文章

      网友评论

          本文标题:vue的计算属性和侦听器

          本文链接:https://www.haomeiwen.com/subject/hezimctx.html