zoukankan      html  css  js  c++  java
  • vue-计算属性和侦听属性

    一、计算属性computed

    计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。
    多次访问计算属性会立即返回之前的计算结果,而不必再次执行函数。对比普通函数方式,每次访问都需要执行一遍函数。

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

    例子

    <script>
    // @ is an alias to /src
    export default {
      data () {
        return {
          title: '标题',
        }
      },
      computed: {
      // 第一钟写法
        ctitle () {
          return this.title
        },
        // 第二种写法
        ctitle2: function () {
          return this.title
        },
        // 第三种写法
        ctitle3: {
          // 默认只有getter
          get: function () {
            return this.title
          },
        }
      }
    }
    </script>

    二、侦听属性watch

    当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。

    例子

    watch: {
        // 监听一个对象属性变化
        obj: {
          handler (newVal, oldVal) {
            console.log('监听对象的属性变化:', newVal)
          },
          deep: true
        },
        // 监听对象中name属性变化
        'obj.name': {
          handler (newVal, oldVal) {
            console.log('监听对象中name属性:', newVal)
          }
        },
        // 监听基数数据类型第一种写法
        info (newVal, oldval) {
          console.log(oldval, newVal)
        },
        // 监听基数数据类型第二种写法
        title: {
          handler (newVal, oldVal) {
            this.obj.name = newVal
          }
        }
      }

    三、实现vue中监听某一个属性值的变化

    1. 监听data中某一个对象中属性变化
    <template>
        <div class="home">
            <p>侦听属性:obj.name={{obj.name}}</p>
            <p>计算属性检测:obj.name={{comName}}</p>
            <input type="text" style="100%;height:30px;border:1px solid" v-model="title">
        </div>
    </template>
    
    <script>
    // @ is an alias to /src
    export default {
      name: 'home',
      data () {
        return {
          title: '',
          obj: { name: '对象标题' }
        }
      },
      computed: {
        comName () {
          return this.obj.name
        }
      },
      watch: {
      // 第一种写法
        obj: {
          handler (newVal, oldVal) {
            console.log('监听对象的属性变化:', newVal)
          },
          deep: true
        },
        // 第二种写法
        'obj.name': {
          handler (newVal, oldVal) {
            console.log('监听对象中name属性:', newVal)
          }
        },
        title: {
          handler (newVal, oldVal) {
            this.obj.name = newVal
          }
        }
      }
    }
    </script>

         2.监听data中基本数据类型属性变化

    <template>
        <div class="home">
            <p>{{ctitle}}</p>
            <input type="text" style="100%;height:30px;border:1px solid" v-model="title">
        </div>
    </template>
    
    <script>
    // @ is an alias to /src
    export default {
      name: 'home',
      data () {
        return {
          title: '标题'
        }
      },
      computed: {
        ctitle () {
          return this.title
        }
      },
      watch: {
        title: {
          handler (newVal, oldVal) {
            console.log(newVal, oldVal)
          }
        }
      }
    }
    </script>
  • 相关阅读:
    The Tamworth Two chapter 2.4
    USACO Controlling Companies chapter 2.3 已跪
    非递归快排
    链表二路归并
    Money Systems chapter 2.3 dp
    #pragma pack与sizeof union
    快慢指针
    12
    11
    10
  • 原文地址:https://www.cnblogs.com/web-record/p/12191722.html
Copyright © 2011-2022 走看看