Vue 里 methods 和 computed 的区别
要实现一个修改姓或者名然后底下的全名跟着一起修改的效果,具体如下


使用 methods 方法的代码如下:
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
| <body> <div id="root"> 姓:<input type="text" v-model="FirstName"><br/><br/> 名:<input type="text" v-model="SecondName"><br/><br/> 全名:<span>{{fullName()}}</span> </div>
<script type="text/javascript"> Vue.config.productionTip = false;
const vm = new Vue({ el: '#root', data: { FirstName:"张", SecondName:"三", }, methods: { fullName(){ console.log('@') return this.FirstName+this.SecondName } }, }); </script> </body>
|
可以顺利地实现该功能。
使用 computed 方法的代码如下:
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
| <body> <div id="root"> 姓:<input type="text" v-model="FirstName"><br/><br/> 名:<input type="text" v-model="SecondName"><br/><br/> 全名:<span>{{fullName()}}</span> </div>
<script type="text/javascript"> Vue.config.productionTip = false;
const vm = new Vue({ el: '#root', data: { FirstName:"张", SecondName:"三", }, computed: { fullName:{ get(){ console.log('@') return this.FirstName+this.SecondName } } } }); </script> </body>
|
也可以实现功能。
区别
当我们使用 methods 实现的时候,每当我们改变或者引用一次数据,模板就会被重新解析,示例如下:

与之不同的是 computed 在生成页面的时候会读取一次 get()
函数,之后便会将数据缓存下来,在下次调用的时候直接从缓存中调用,而不需要再次解析页面。直到数据发生改变,get()
函数才会被再次调用。示例如下:

数据发生改变时:

同时,computed 中写下的东西并不是你写什么就是什么,而是他先调用里面的对象的 get()
函数得到返回值,将那个返回值命名为对象名放在 vm 里,本质上是一个值。而 methods 中你写下函数,那它就是以函数的形式存放在 vm 中;值就是值的形式存放在 vm 中……
