冇事来学系--Vue2.0 计算属性

简介: 计算属性计算属性指的是通过一系列运算之后,最终得到一个属性值。这个动态计算出来的属性值可以被模板结构或methods方法使用

计算属性


计算属性指的是通过一系列运算之后,最终得到一个属性值。这个动态计算出来的属性值可以被模板结构或methods方法使用

计算属性的优点:

  • 实现了代码的复用
  • 只要计算属性中依赖的数据源发生了变化,则计算属性会自动重新求值
<div id="app">
  <div>R:<input type="text" v-model.number="r"></div>         <!-- .number是v-model的修饰符,将输入的值转化为数值类型 -->
  <div>G:<input type="text" v-model.number="g"></div>
  <div>B:<input type="text" v-model.number="b"></div>
  <hr>
  <!-- 这是用来显示颜色的盒子 -->
  <!-- :style是动态绑定样式,值是一个样式对象(目前只包含backgroundColor背景颜色) -->
  <!-- 绑定这个样式后,就可以控制div的背景颜色显示 -->
  <div class="box" :style="{backgroundColor:`rgb(${r}, ${g}, ${b})` }">
      {{ `rgb(${r}, ${g}, ${b})` }}
  </div>
  <button @click="show">按钮</button>
</div>


const vm = new Vue({
    el: '#app',
    data: {
        // 红色
        r: 0,
        // 绿色
        g: 0,
        // 蓝色
        b: 0
    },
    methods: {
        show(){
            console.log(`rgb(${this.r}, ${this.g}, ${this.b})`);
        }
    },
  // 这段代码里面,字符串rgb(${r}, ${g}, ${b})重复写了很多遍,导致代码冗余
  // 解决办法:使用计算属性,实现代码复用
})



使用计算属性优化上面的代码

<div id="app">
  <div>R:<input type="text" v-model.number="r"></div>         <!-- .number是v-model的修饰符,将输入的值转化为数值类型 -->
  <div>G:<input type="text" v-model.number="g"></div>
  <div>B:<input type="text" v-model.number="b"></div>
  <hr>
  <div class="box" :style="{backgroundColor:rgb}">         <!-- 使用计算属性中的rgb -->
    {{ rgb }}
  </div>
  <button @click="show">按钮</button>
</div>


const vm = new Vue({
  el: '#app',
  data: {
    // 红色
    r: 0,
    // 绿色
    g: 0,
    // 蓝色
    b: 0               
  },
  methods: {
    show(){
      console.log(this.rgb);
    }
  },
  filters: {
  },
  watch: {
  },
  // 计算属性要写在computed节点下
  // 计算属性在定义的时候要定义成方法的格式
  computed: {
    // 定义相应的方法,一定得带return
    // 声明的是一个方法,但是在通过打印vm实例对象,发现这个方法在vm实例对象中是一个属性,所以使用这个计算属性生成的字符串时,要以vm实例中的属性来使用
    // 底层原理是调用了这个方法,然后将返回值放到vm实例中作为属性
    rgb(){
      return `rgb(${this.r}, ${this.g}, ${this.b})`
    }
    // 计算属性的完整写法
    // 当计算属性不需要被修改的时候,就使用上面的写法
    rgb: {
      get(){
        return `rgb(${this.r}, ${this.g}, ${this.b})`
      },
      /* 一般情况下,计算属性是不修改的(可以修改,但不改)。因为计算属性通常是在页面上展示的,人们常修改的是依赖的数据,所以通常用不到setter */
      set(value){
        const arr = value.split(',')
        this.r = arr[0]
        this.g = arr[1]
        this.b = arr[2]
      }
    }
  }
})



计算属性的原理:底层借助了Object.defineproperty方法提供的getter和setter

get函数的执行时机:

  1. 初次读取数据的时候执行一次,然后会将读取的结果缓存起来,下次读取的数据是缓存的数据
  2. 当依赖的数据放生变化的时候会再次执行

注意:

  1. 计算属性最终会是Vue实例对象vm的一个属性,可以直接使用
  2. 当计算属性被修改时,必须要写setter去响应修改,且setter中要写依赖的数据的变化代码 (即要拿到data里面的数据并修改)
目录
相关文章
|
2月前
|
JavaScript API
Vue3中的计算属性能否动态修改
【9月更文挑战第5天】Vue3中的计算属性能否动态修改
255 10
|
13天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
1月前
|
JavaScript API
vue尚品汇商城项目-day04【24.点击搜索按钮跳转后的页面商品列表、平台售卖属性动态展示(开发Search组件)】
vue尚品汇商城项目-day04【24.点击搜索按钮跳转后的页面商品列表、平台售卖属性动态展示(开发Search组件)】
57 1
vue尚品汇商城项目-day04【24.点击搜索按钮跳转后的页面商品列表、平台售卖属性动态展示(开发Search组件)】
|
1月前
|
监控 JavaScript 开发者
在 Vue 中,子组件为何不可以修改父组件传递的 Prop,如果修改了,Vue 是如何监控到属性的修改并给出警告的
在 Vue 中,子组件不能直接修改父组件传递的 Prop,以确保数据流的单向性和可预测性。如果子组件尝试修改 Prop,Vue 会通过响应式系统检测到这一变化,并在控制台发出警告,提示开发者避免这种操作。
|
2月前
|
缓存 JavaScript 前端开发
vue-day02计算属性,v-bind,v-if,v-for
文章介绍了Vue.js中的计算属性、class与style的绑定、条件渲染和列表渲染的使用。通过示例代码展示了如何使用计算属性简化模板逻辑、如何通过v-bind动态绑定class和style、如何使用v-if进行条件渲染以及如何使用v-for进行列表渲染。这些特性使得Vue.js在构建动态用户界面时更加灵活和强大。
vue-day02计算属性,v-bind,v-if,v-for
|
1月前
|
JavaScript 前端开发 开发者
VUE学习一:初识VUE、指令、动态绑定、计算属性
这篇文章主要介绍了Vue.js的基础知识,包括初识Vue、指令如v-for、v-on的使用、动态属性绑定(v-bind)、计算属性等概念与实践示例。
63 1
|
1月前
|
缓存 JavaScript 前端开发
探索Vue.js中的计算属性与侦听器
【10月更文挑战第5天】探索Vue.js中的计算属性与侦听器
23 1
|
1月前
|
缓存 JavaScript
|
1月前
|
缓存 JavaScript Serverless
vue中computed计算属性、watch侦听器、methods方法的区别以及用法
vue中computed计算属性、watch侦听器、methods方法的区别以及用法
114 0
|
2月前
|
JavaScript
vue 计算属性,实现复选框的全选和反选 【小案例】
本文通过一个Vue.js小案例,展示了如何使用计算属性实现复选框的全选和反选功能。计算属性的完整写法包括get和set两部分,分别用于获取值和设置值。在全选和反选的场景中,计算属性的get方法用于判断所有复选框是否都已选中,从而控制全选复选框的状态;计算属性的set方法则用于根据全选复选框的状态,批量更新每个复选框的选中状态。通过示例代码和效果图,文章清晰地说明了计算属性在实现这一功能中的作用和效果。
vue 计算属性,实现复选框的全选和反选 【小案例】
下一篇
无影云桌面