computed&methods&watch

使用场合:
一个值的改变,会影响多个值(或处理多件事),使用watch(为了观察一个值)
多个值的改变,为了得到一个结果,使用computed(为了得到一个值)

methods

其中的函数,页面重新渲染时重新执行
改变data中的任一数据就会重新渲染

<body>
  <div id="root"></div>
</body>
<script>
  const app = Vue.createApp({
    data() {
      return {
        message:'hello world',
        count: 2,
        price: 5,
      };
    },    
    methods: {
      getTotal() {
        return Date.now();
        // return this.count * this.price;
      },
    },
    template: `<div>
    {{getTotal()}}
    </div> `,
  });
  const vm = app.mount("#root");
</script>

在这里插入图片描述
在这里插入图片描述

computed

其中的函数,依赖的内容变更时重新执行
解析:total()依赖的是count属性,故message属性值改变,不重新计算;只有count属性值改变才重新计算

  <body>
    <div id="root"></div>
  </body>
  <script>
    const app = Vue.createApp({
      data() {
        return {
          message:'hello world',
          count: 2,
          price: 5,
        };
      },     
      computed: {
        total() {
          // 技巧:时间戳可以看出来是否右重新计算
          return Date.now() + this.count;
          // return this.count * this.price;
        },
      },
      template: `<div>
      {{total}}
      </div> `,
    });
    const vm = app.mount("#root");

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

watch

  <body>
    <div id="root"></div>
  </body>
  <script>
    const app = Vue.createApp({
      data() {
        return {
          count: 2,
          price: 5,
        };
      },
      // 监听price属性值的变化
      watch: {
        price() {
          setTimeout(() => {
            console.log("price changed");
          }, 3000);
        },
      },
      computed: {
        total() {
          return this.count * this.price;
        },
      },
      template: `<div> {{total}}</div> `,
    });
    const vm = app.mount("#root");
  </script>

在这里插入图片描述

2)在watch中写一般函数

  <body>
    <div id="root"></div>
  </body>
  <script>
    const app = Vue.createApp({
      data() {
        return {
          count: 2,
          price: 5,
          newTotal: 10,
        };
      },
      watch: {
        price(current, prev) {
          this.newTotal = current * this.count;
        },
      },
      template: `<div> {{newTotal}}</div> `,
    });
    const vm = app.mount("#root");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值