06_计算属性

计算属性

相比于methods,效率更高

完整写法

<body>
  <div id="app">
    <label for="last-name">姓:</label>
    <input id="last-name" type="text" v-model="lastName" />
    <br />
    <label for="first-name">名:</label>
    <input id="first-name" type="text" v-model="firstName" />
    <h3>全名:{{ fullName }}</h3>
  </div>
  <script>
    const vm = new Vue({
      el: '#app',
      data() {
        return {
          lastName: '',
          firstName: '',
        };
      },
      computed: {
        fullName: {
          // 当fullName被读取的时,get就会被调用,get的返回值作为fullName的值
          // get什么时候被调用?
          // 1. 初次读取fullName时。
          // 2. 所依赖的数据发生变化时。
          get() {
            console.log(this); // this指向vm
            return this.lastName + this.firstName;
          },
          // set什么时候被调用?
          // 当fullName被修改时 vm.fullName = '李四'
          set(value) {
            console.log(value); // 修改的fullName值
            const arr = value.split('');
            console.log(arr);
            this.lastName = arr[0];
            this.firstName = arr[1];
          },
        },
      },
    });
  </script>
</body>
  1. 定义:通过已有的属性来计算出新的属性,当依赖的属性发生变化时,自动重新计算得到新的属性。

  2. 优势:内部具有缓存机制,初次读取时会计算一次,值可以复用,当依赖数据发生变化时才重新计算。

  3. 计算属性最终会出现在vm上,直接读取使用。

  4. 修改计算属性的值,必须写set函数去响应修改,set函数中去更新data中的值才是实现修改。

简写形式

一般情况下,计算属性的值只是用来展示到页面,不会去修改计算属性的值

// 只考虑读取,不考虑修改,直接把计算属性写成一个函数,这里相当于set
fullName: function () {
  return this.lastName + this.firstName;
},
阅读剩余
THE END