要实现一个修改姓或者名然后底下的全名跟着一起修改的效果,具体如下

image-20220617113203570

image-20220617113222588

使用 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; //阻止vue产生生产错误

//创建vue实例
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; //阻止vue产生生产错误

//创建vue实例
const vm = new Vue({
el: '#root',
data: { //属性
FirstName:"张",
SecondName:"三",
},
computed: {
fullName:{
get(){
console.log('@')
return this.FirstName+this.SecondName
}
}
}
});
</script>
</body>

也可以实现功能。

区别

当我们使用 methods 实现的时候,每当我们改变或者引用一次数据,模板就会被重新解析,示例如下:

image-20220617114029132

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

image-20220617114425608

数据发生改变时:

image-20220617114524072

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

image-20220617115108935