美文网首页
计算属性学习

计算属性学习

作者: 23f43267337f | 来源:发表于2019-03-24 23:04 被阅读0次

什么是计算属性?

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

上面这个例子我们在模板内使用了比较复杂的运算,这是在后期比较难维护。
对于这种复杂的逻辑,应该使用计算属性来替代。

计算属性是用来声明式的描述一个值依赖了其它的值。当你在模板里把数据绑定到一个计算属性上时,Vue 会在其依赖的任何值导致该计算属性改变时更新 DOM。这个功能非常强大,它可以让你的代码更加声明式、数据驱动并且易于维护。

实例说明

<div id="demo">
 两购物车总计{{prices}}
</div> 
<script>
var app = new Vue({
  el:'#demo',
  data:{
          package1:[
           {
            name:'huawei',
            price:4999,
            count:2
          },
          {
            name:'xiaomi',
            price:2999,
            count:3
         }
         ],
          package2:]
           {
            name:'Iphone',
            price:8999,
            count:1
          },
          {
            name:'samsung',
            price:5999,
            count:1
         ],
},
}
computed:{
prices:function(){
            var prices =0
            for(i =0;i<this.package1.length;i++){
                  prices = this.package[i].price*this.package[i].count
              }
            for(j =0;j<this.package2.length;j++){
                  prices = this.package[j].price*this.package[j].count
              }
          }
      }
  },
})
</script>

通过计算属性prices,获取两个购物车的价格和数量,然后返回给页面上。

计算属性还可以依赖多个 Vue 实例的数据,只要其中任一数据变化,计算属性就会重新执行,视图也会更新

getter和setter

每一个计算属性都包含一个 getter 和一个 setter,我们上面的两个示例都是计算属性的默认用法 ,只是利用了 getter 来读取。在你需要时,也可以提供一个 setter函数 , 当手动修改计算属性的值就像修改一个普通数据那样时,就会触发 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 也会相应地被更新。

计算属性缓存

没有使用计算属性,在 methods 里定义了一个方法实现了相同的效果,甚至该方法还可以接受 参数,使用起来更灵活。既然使用 methods 就可以实现,那么为什么还需要计算属性呢?原因就是计算属性是基于它的依赖缓存的。 一个计算属性所依赖的数据发生变化时,它才会重新取值,所以text 只要不改变,计算属性也就不更新。
假设有一个性能开销比较大的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后可能有其他的计算属性依赖于 A 。如果没有缓存,将不可避免的多次执行 A 的 getter!如果不希望有缓存,用方法来替代。

题目试练

  • 创建以一个vue实例,并使用计算属性和方法实现一个字符串翻转的操作,写出核心代码。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>字符翻转操作</title>
</head>
<body>
  <div id="demo">
    <p>{{text}} 原始字符</p>
    <p>{{text.split(',').reverse().join(',')}} 方法翻转</p>
    <p>{{reverseText}} 计算属性翻转</p>
  </div>
 <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
  <script>
    var app = new Vue({
      el: '#demo',
      data: {
        text: '123, 456, 789'
      },
      computed:{
        reverseText:function(){
          return this.text.split(',').reverse().join(',')
        }
      }
     })
  </script>
</body>
</html>
  • 实例化一个vue实例,在data中定义一个姓氏firstName和名字firstName,还有一个全称叫fullName。

需求:分别使用watch监听器和计算属性来实现以下功能实现,只要姓氏firstName和名字firstName中的任意一个改变,全称fullname就会改变。

<div id="demo">{{ fullName }}</div>

watch

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
    }
  }
})

computed

var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'Foo',
    lastName: 'Bar'
  },
  computed: {
    fullName: function () {
      return this.firstName + ' ' + this.lastName
    }
  }
})

相关文章

  • 计算属性学习

    什么是计算属性? 上面这个例子我们在模板内使用了比较复杂的运算,这是在后期比较难维护。对于这种复杂的逻辑,应该使用...

  • Vue学习之计算属性和侦听器

    上一篇:Vue学习笔记之模板语法 计算属性 对于任何复杂逻辑,你都应当使用计算属性。 基础例子 计算属性缓存 vs...

  • 第十五节:Vue选项:computed/methods/watc

    1. 计算属性computed与方法methods的比较 通过学习的知识,我们已经了解到computed计算属性和...

  • watch和computed的区别

    计算属性Computed: 计算属性通常依赖于其他数据属性。对于依赖属性的任何改变都会触发计算属性的逻辑。计算属性...

  • Vue.js,学习心得(四)

    学习心得,计算属性 直接上代码了

  • vue计算属性和侦听器

    祭出demo 计算属性 计算属性缓存vs方法函数 计算属性vs侦听属性 计算属性的setter 侦听器 在这个示例...

  • 7 vue 计算属性

    计算属性 计算属性的复杂属性 set/get

  • 属性和方法

    1、属性 存储属性 延迟存储属性 计算属性 只读计算属性 只有 getter 方法但没有 setter 方法的计算...

  • Swift5.x- 方法(中文文档)

    引言 继续学习Swift文档,从上一章节:属性,我们学习了Swift属性相关的内容,如存储属性和计算属性set和g...

  • vue学习(12)计算属性

    知识点 1:只要data中的数据发生改变,vue就会重新解析模板。只要遇到插值语法里面写方法,那么这个方法肯定会被...

网友评论

      本文标题:计算属性学习

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