Vue中的(computed)计算属性和(watched)侦听属性以及(methods)方法

1. computed 计算属性可用于快速计算视图中显示的属性。
这些计算将被缓存,并且只在需要时更新。
他的方法不需要在data里面定义
它们完全是同步的。

  <div class="text">
    {{total}}
  </div>
export default {
  data() {
    return {
      a: '我是a',
      b: '我是b',
    };
  },
  computed: {
    total() {
      return `${this.a} ${this.b}`;
    },
  },
};

因此当 this.a或者this.b 发生改变时,所有依赖 total 的绑定也会更新。
计算属性默认只有 getter ,不过在需要时你也可以提供一个 setter :

export default {
  data() {
    return {
      a: '我是a',
      b: '我是b',
    };
  },
  computed: {
    // total() {
    //   return `${this.a} ${this.b}`;
    // },
    total: {
      get() {
        return `${this.a} ${this.b}`;
      },
      set(newValue) {
        console.log(newValue);  //我是set
        this.a = newValue;
      },
    },
  },
  mounted() {
    setInterval(() => { this.total = '我是set'; }, 1000);
  },
};

2. watched监听(在data里面定义了)

<template>
  <div class="text">
    {{total}}
  </div>
</template>

export default {
  data() {
    return {
      first: 'Lucy',
      last: 'Bob',
      total: '',
    };
  },
  watch: {
    first() {
      this.total = this.first + this.last;
    },
  },
  mounted() {
   //this.first = 'Pop';
  },
};

第一次不会执行watch里面的方法,如果想要直接执行watch里面的方法,这就需要用到handler方法和immediate属性

export default {
  data() {
    return {
      first: 'Lucy',
      last: 'Bob',
      total: '',
      obj: {
        a: '',
      }
    };
  },
  watch: {
    first: {
      handler() {
        this.total = this.first + this.last;
      },
      immediate: true,
    },
  },
  mounted() {
    // this.first = 'Pop';
  },
};

如果我们需要监听obj里的属性a的值呢?需要用到deep属性
但是这样会监听所有的obj里面的data,开销比较大。

export default {
 data() {
    return {
      first: 'Lucy',
      last: 'Bob',
      total: '',
      obj: {
        a: '我是obj',
      },
    };
  },
  watch: {
    first: {
      handler() {
        this.total = this.first + this.last;
      },
      immediate: true,
    },
    obj: {
      handler() {
        alert(this.obj.a);
      },
      immediate: true,
      deep: true,
    },
  },
  mounted() {
    // this.first = 'Pop';
  },
};

优化方案:

export default{
 data() {
    return {
      first: 'Lucy',
      last: 'Bob',
      total: '',
      obj: {
        a: '我是obj',
      },
    };
  },
  watch: {
    first: {
      handler() {
        this.total = this.first + this.last;
      },
      immediate: true,
    },
    'obj.a': {
      handler() {
        alert(this.obj.a);
      },
      immediate: true,
    },
  },
  mounted() {
    // this.first = 'Pop';
  },
};

methods是方法,是要调用它就会执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值