Vue.js的计算属性

2019-09-27  本文已影响0人  CodeMT

一、起因?

虽然在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作。在模板中放入太多的逻辑会让模板过重且难以维护。比如:

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

案例如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  </title>计算属性</title>
</head>
<body>
  <div id="app">
    <p>{{fullname}}</p>
    <p>{{reverse}}</p>
  </div>
<script src="js/vue.js"></script>
<script>
  var app = new Vue({
    el:'#app',
    data:{
      firstname:'张',
      lastname:'三丰'
    },
    // 计算属性选项
    computed:{
      fullname:function(){
        return this.firstname + this.lastname;
      },
      reverse:function(){
        return (this.firstname + this.lastname).split(' ').reverse().join(' ');
      }
    }
  })
</script>
</body>
</html>

二、计算属性 和 Methods的区别?

当页面重新渲染(不是刷新)的时候,计算属性不会变化,直接读取缓存使用,适合较大量的计算和改变频率较低的属性;而method,就是当页面重新渲染的时候(页面元素的data变化,页面就会重新渲染),都会重新调用method
如果不希望有缓存,我们可以用method取代computed

疑惑:为什么需要缓存?

三、计算属性的setter方法

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

<body>
  <div id="app">
    <p>{{fullName}}</p>
  </div>
<script src="js/vue.js"></script>
<script>
  var app = new Vue({
    el:'#app',
    data:{
      firstName:'Tom',
      lastName:'jack'
    },
    computed:{
      fullName:{
        // get方法
        get:function(){
          return this.firstName + ' ' + this.lastName
        }
        // setter方法
        set:function(newValue){
          var names = newValus.split(' ');
          this.firstName = names[0];
          this.lastName = names[names.length - 1];
        }

      }
    }
  })
</script>
</body>

运行结果:

上一篇 下一篇

猜你喜欢

热点阅读