问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

vue.js中,什么时候用methods?什么时候用computed

发布网友 发布时间:2022-03-24 10:48

我来回答

2个回答

热心网友 时间:2022-03-24 12:17

computed
以前的名字叫做ready
是在dom加载后马上执行的。

而methods中的函数,则必须要有一定的触发条件。
在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作。模板是为了描述视图的结构。在模板中放入太多的逻辑会让模板过重且难以维护。这就是为什么 Vue.js 将绑定表达式*为一个表达式。如果需要多于一个表达式的逻辑,应当使用**计算属性**。
Vue实例的computed的属性
<div class="test">
<p>原始的信息{{message}}</p>
<p>计算后的信息{{ComputedMessage}}</p>
</div>

js代码
var myVue = new Vue({
el: ".test",
data: {
message:12
},
computed:{
ComputedMessage:function () {
return this.message+10;
}
}
});

界面会显示 12 和 22
上述的方式是一种缓冲的实现的效果,这种实现的方式依赖于它的缓寸,计算得到的属性只有在相关依赖(message)改变的时候才会重新取值,这就意味着只要message没有发生改变的时候,多次访问ComputedMessage都不会再重新执行计算的这个属性。。

计算后的ComputedMessage属性始终是依赖于message的
通过调用函数实现同样的效果
<div class="test">
<p>原始的信息{{message}}</p>
<p>计算后的信息{{MessageFunction()}}</p>
</div>

js代码
var myVue = new Vue({
el: ".test",
data: {
message:12
},
methods:{
MessageFunction:function () {
return this.message+10;
}
}
});

得到的结果和上面的结果是一样的,但是每次被重新渲染的时候都会被重新调用。
所以使用上述两种方式的时候,首先要确定你是否需要借助缓存
使用vue实例的watch
这个没有看懂呀
但是使用computed这个属性更加的方便和快捷
<div class="test">
<p>原始的信息{{fullName}}</p>
</div>

js代码
var myVue = new Vue({
el: ".test",
data: {
firstName:"fur",
lastName:"bool"
},
computed:{
fullName:function () {
return this.firstName+this.lastName
}
}
});

而且你可以computed属性设置setter getter是默认就有的。

演示set和get的调用过程
<div class="test">
<p>原始的信息{{fullName}}</p>
<button @click="fu">test</button>
</div>

js代码
var myVue = new Vue({
el: ".test",
data: {
firstName:"fur",
lastName:"bool",
fullName:"sasas dsdsd dsds"
},
computed:{
fullName:{
get:function () {
console.log("get")
return this.firstName+this.lastName
},
set:function(value){
var names=value.split(" ");
this.firstName=names[0];
this.lastName=names[names.length-1];
console.log("set");
}
}
},
methods:{
fu:function () {
myVue.fullName="sasas dsdsd dsds";
console.log(myVue.firstName); //sasas
console.log(myVue.lastName); //dsds
}
}
});

首先会输出get;

在点击按钮为fullName赋值的时候首先调用set 再调用get方法。
自定义的Watcher
虽然计算属性在大多数情况下是非常合适的,但是有的时候也需要自定义一个watcher。这是因为你想要在数据变化响应的时候,执行异步操作胡总和其他的操作是非常有用的。

热心网友 时间:2022-03-24 13:35

1、computed:计算属性将被混入到 Vue 实例中。所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例。
2、methods:methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。方法中的 this 自动绑定为 Vue 实例。

通俗来讲,
computed是在HTML DOM加载后马上执行的,如赋值;
而methods则必须要有一定的触发条件才能执行,如点击事件;
所以他们的执行顺序为:默认加载的时候先computed再watch,不执行methods;等触发某一事件后,则是:先methods再watch。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我新买台魅蓝note2 连接wifi用一个小时温度就35度左右了,请问正常... 魅蓝note2刚买上,玩了大概一小时游戏就有些发热,正常吗?用去实体店换... 为什么魅蓝note2那么容易发热,我把这手机和华为荣耀5x比了下,这手机 《岳阳楼记》优秀读后感 ...与户口所在地不是一个县市,退休时该怎么办理,我单位是湖南邵阳... "谋"和"某"读音相同吗 某的拼音某的读音 苹果密码与安全性点不开是怎么回事 小规模装饰公司全套详细的账务处理 公司打生活费是否经过银行在打入个人的? 学vue-loader时碰到的一个问题,求教 js节流函数的时间戳时长如何控制 vue是遵从amd还是cmd OPPO R9S手机里下载了vue这个软件怎么在设置里调分镜数和时长? vue.js渲染时间磋该怎么处理 vue jstree怎么调整间隔 vue 视频加载时间过长会导致无法播放吗 xgplayer vue设置时间 VUE Vlog 可以调整图片素材播放速度吗?如何操作? vuevlog最长多久视频 redis能比mongo快多少 java面试中redis,mongodb类的,会问哪些问题,怎么回答 谈谈mongodb,mysql的区别和具体应用场景 为什么mongodb与redis非但没有形成竞争反而是互补关系 redis mongodb 哪个性能高 redis和memcached的区别 mongodb hbase redis 哪个更强大 如何评价RethinkDB?和MongoDB,Redis有什么区别? Redis,SSDB,Memcache和MongoDB的区别 关系型数据库和非关系型数据库有什么区别,mongdb和redis怎么选择,mongdb优势在哪 如何评价RethinkDB?和MongoDB,Redis有什么区别 vuejs 方法里怎么阻止默认时间 学习前端vue怎么样?还好吗? vue js java LocalDateTime时间展示问题 vue aftereach方法什么时候执行 vue什么时候火起来的 vue.js怎么获取服务器时间 vue.js怎样将时间戳转化为日期格式 vue3张图片随时间切换 怎么保存或者下载网课视频(网课快过期了)? 购买的网课视频怎么保存下来 怎么把付费网课保存到百度云网盘? 在么,想请教一下你,怎么把网课保存下来? 有期限的网课视频怎么保存? 如何将网校视频课程保存到电脑上 怎么保存网课视频到手机 粉笔教师网课缓存视频怎么保存到本地? 请问一下怎么把买到的网课保存到百度网盘啊? 怎么把课程下载到百度网盘 跟谁学的网课快过期了,怎么保存? 怎样把自己录好的网课存放在百度网盘中永久收藏?