vue中计算属性和方法的区别,演示代码

第一个,使用计算属性,来修改数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<div id="example">
     <p>{{ now }}"</p>
     <p>{{msg}}</p>
   </div>
    
   <script>
     //  在控制台,使用vm.msg=2,修改msg的时候,时间不会发生变化
   var vm = new Vue({
     el: '#example',
     data: {
       msg: 'Hello'
     },
     computed: {
       now: function () {
         return Date.now()
       }
     }
   })
   </script>

 第二种,使用方法来修改数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<div id="example">
       <p>{{ now() }}"</p>
       <p>{{msg}}</p>
     </div>
      
     <script>
       //   在控制台,使用vm.msg=2,修改msg的时候,时间发生了变化
     var vm = new Vue({
       el: '#example',
       data:{
           msg:"你好"
       },
       methods: {
         now: function () {
           return Date.now()
         }
       }
     })
     </script>

  区别和联系

  • 两者的执行结果是完全相同的
  • 计算属性是基于他们的依赖进行缓存的,只有在相关依赖发生改变时,他们才会重新求值,也就是说,只要他的依赖没有发生变化,那么每次访问的时候计算属性都会立即返回之前的计算结果,不再执行函数
  • 每次触发重新渲染时,调用方法将总会再次执行函数
  • 上方两个例子,计算属性将总会返回相同值,而方法则不会
  另一个例子
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<div id="example">
    <p>{{msg}}</p>
    <p>{{ reversedMessage()}}"</p>
    <hr>
    {{ceshi}}
</div>
 
<script>
    //   在控制台,使用vm.ceshi="修改",修改ceshi的时候,计算属性中的函数,没有执行
    var vm = new Vue({
        el: '#example',
        data: {
            msg: 'Hello',
            ceshi:"测试"
        },
        // computed: {
        //     // 计算属性的 getter
        //     reversedMessage: function () {
        //         // `this` 指向 vm 实例
        //         console.log("计算属性执行了")
        //         return this.msg.split('').reverse().join('')
        //     }
        // },
         //   在控制台,使用vm.ceshi="修改",修改ceshi的时候,方法中的函数,都会执行
        methods: {
            reversedMessage: function () {
                console.log("方法执行了")
                return this.msg.split('').reverse().join('')
            }
        }
    })
</script>

  再总结:计算属性中的函数,只有在依赖改变的时候,才会执行。方法中的函数,数据一遍,这个函数也会执行。

  会不会执行,通过console.log来打印判断

  

posted @   风意不止  阅读(453)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示