(4)vue 计算属性和侦听器

 一、计算属性

1.计算属性

如果计算方式不能复用,且不好维护

<div id="example">
  {{ message.split('').reverse().join('') }}
</div>

所以计算方式比较复杂,或者会重复使用时,可以用计算属性

    <div id="example">
        <p>Original message: "{{ message }}"</p>
        <p>Computed reversed message: "{{ reversedMessage }}"</p>
    </div>
    <script>
        var vm = new Vue({
            el: '#example',
            data: {
                message: 'Hello'
            },
            computed: {
                // 计算属性的 getter
                reversedMessage: function () {
                    // `this` 指向 vm 实例
                    return this.message.split('').reverse().join('')
                }
            }
        })
    </script>

2.计算属性的缓存设计

计算属性是基于它们的响应式依赖进行缓存的,如果数据没有发生改变,下次调用方法时会使用上一次的结果

    <script>
        var vm = new Vue({
          computed: {
              now: function () {
                return Date.now()
              }
          }
        })
    </script>

如果希望每次都重新执行方法,可以使用

    <script>
        var vm = new Vue({
          methods: {
              now: function () {
                return Date.now()
              }
          }
        })
    </script>

 注意区分属性和方法,属性后不()

 3.侦听

使用vue的watch属性可以监听自定义属性的改变

    <div id="demo">{{ fullName }}</div>
    <script>
        var vm = new Vue({
          el: '#demo',
          data: {
            firstName: 'Foo',
            lastName: 'Bar',
            fullName: 'Foo Bar'
          },
          watch: {
            firstName: function (val) {
              this.fullName = val + ' ' + this.lastName
            },
            lastName: function (val) {
              this.fullName = this.firstName + ' ' + val
            }
          }
        })
    </script>

但使用计算属性可能会更加方便

    <div id="demo">{{ fullName }}</div>
    <script>
        var vm = new Vue({
          el: '#demo',
          data: {
            firstName: 'Foo',
            lastName: 'Bar'
          },
          computed: {
            fullName: function () {
              return this.firstName + ' ' + this.lastName
            }
          }
        })
    </script>

4.get set

    <div id="demo">{{ fullName }}</div>
    <script>
        var vm = new Vue({
            el: '#demo',
            data: {
                firstName: "tom"
            },
            computed: {
                fullName: {
                    get: function () {
                        return this.firstName
                    },
                    set: function (value) {
                        console.log(value)
                        this.firstName=value
                    }
                }
            }
        })
    </script>

二、侦听

原文地址:https://www.cnblogs.com/buchizaodian/p/12264343.html