computed 计算属性 和 methods 方法

91 阅读1分钟

computed 计算属性:

概念:基于现有的数据,计算出来的新属性。 依赖的数据变化,自动重新计算。

语法:

① 声明在 computed 配置项中,一个计算属性对应一个函数

② 使用起来和普通属性一样直接使用→ this.计算属性 {{ 计算属性 }}

作用:封装了一段对于数据的处理,求得一个结果。 可以将一段 求值的代码 进行封装

methods 方法:

作用:给实例提供一个方法,调用以处理业务逻辑。

语法:

① 写在 methods 配置项中

② 作为方法,需要调用 → this.方法名( ) {{ 方法名() }} @事件名="方法名"

缓存特性(提升性能):

计算属性会对计算出来的结果缓存,再次使用直接读取缓存,

依赖项变化了,会自动重新计算 → 并再次缓存

计算属性默认的简写,只能读取访问,不能 "修改"。 如果要 "修改" → 需要写计算属性的完整写法

<div id="app">
    姓:<input type="text" v-model="firstName"> +
    名:<input type="text" v-model="lastName"> =
    <span>{{ fullName }}</span><br><br>
    
    <button @click="changeName">改名卡</button>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        firstName: '刘',
        lastName: '备',
      },
      methods: {
        changeName () {
          this.fullName = '黄忠'
        }
      },
      computed: {
        // 简写 → 获取,没有配置设置的逻辑
        // fullName () {
        //   return this.firstName + this.lastName
        // }

        // 完整写法 → 获取 + 设置
        fullName: {
          // (1) 当fullName计算属性,被获取求值时,执行get(有缓存,优先读缓存)
          //     会将返回值作为,求值的结果
          get () {
            return this.firstName + this.lastName
          },
          // (2) 当fullName计算属性,被修改赋值时,执行set
          //     修改的值,传递给set方法的形参
          set (value) {
            // console.log(value.slice(0, 1))          
            // console.log(value.slice(1))         
            this.firstName = value.slice(0, 1)
            this.lastName = value.slice(1)
          }
        }
      }
    })
  </script>