vue中computed和watch
computed 计算属性
能够监听vue数据上的变化,页面上来就执行一次,每改变一次数据就又触发。在操作数据的时候,会派生出另一个事情
1、函数形式
computed:{
listenArr(){
/*
使用data中数据,自动帮你监听数据的变化
返回的结果就是通过改变数据 做的另一件事情(当数据变化时候需要做的事情)
*/
}
}
2、对象形式
computed:{
listenArr:{
get(){
//获取时候
},
set(newVal){
//修改时候
}
}
}
get是获取的时候执行的操作。set是修改时候执行的操作
应用场景:
比如在用户输入框改变数据的时候过滤数字;
通过数据的变化,来进行累计;
通过单选按钮的变化,来进行判断是否全选等等
优点:指定看哪个数据,就只看哪个数据
PS:需要注意的是 函数名,不要和data中的数据一样。
<div id="app">
全选
<input type="checkbox" v-model="all">
<hr>
<input type="checkbox" v-for="(val,key) in arr" v-model="val.checked">{{arr}}
</div>
new Vue({
el:'#app',
data:{
arr:[
{checked:true},
{checked:false},
{checked:false},
{checked:true}
]
},
//当使用get和set时候,computed中定义的属性为一个对象
//当不使用get和set时候,computed中定义的属性可以是一个函数
computed:{
/*
all(){
return this.arr.every(e=>e.checked);
}
*/
all:{
get(){
//获取的时候执行的操作
return this.arr.every(e=>e.checked);
},
set(newVal){
//修改时候执行的操作。其中newVal 是改变之后的结果
return this.arr.forEach(e=>e.checked = newVal)
}
}
}
});
watch 指定数据监听器
应用场景:
监听路由参数的变化
种localStorage的时候,深度添加等等
<div id="app">
<input type="text" v-model="val">
<ul>
<li v-for="(val,key) in arr">
<input type="checkbox" v-model="val.checked">
</li>
</ul>
{{arr}}
</div>
new Vue({
el:'#app',
data:{
val:'hao123',
arr:[
{checked:true},
{checked:false},
{checked:false},
{checked:false}
]
},
watch:{
arr:{
handler(v){
localStorage.setItem('data',JSON.stringify(v))
},
deep:true
}
}
});
function getStorage(name){
//存储到本地
let data = localStorage.getItem(name) || '[{"checked":false},{"checked":false},{"checked":false}]';
return JSON.parse(data); //[] -> [{}]
}
总结:computed和watch都起到监听一个数据,并进行处理的作用
computed主要用于对同步数据的简单处理,watch则主要用于数据输入时异步操作或者开销较大的情况
computed在监听数据变化时候,上来就会执行一次。而watch页面上来是不会执行的,只有指定数据发生变化才会触发
computed具有缓存性,值不变化会读取缓存,watch无缓存性,值不变化也会执行
vue中computed和watch的更多相关文章
- vue中computed(计算属性)和watch在实现父子组件props同步时的实际区分
vue中computed和watch的对比是一个很有意思的话题. 看过官网教程以后,我们往往更倾向多使用computed.computed优点很多,却在某些时候不太适用. 今天我们就稍微讨论一下,当我 ...
- Vue中computed和watch的区别
在vue中computed和watch的真正区别是:computed产生于它的依赖,而watch产生于它的依赖的变化.只要依赖存在,我们就能访问到其对应的computed属性:但只有依赖发生了改变,我 ...
- Vue中computed分析
Vue中computed分析 在Vue中computed是计算属性,其会根据所依赖的数据动态显示新的计算结果,虽然使用{{}}模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的,在模板中放入太 ...
- vue中computed的作用以及用法
在vue中computed是计算属性,主要作用是把数据存储到内存中,减少不必要的请求,还可以利用computed给子组件的data赋值. 参考地址:https://www.jianshu.com/p/ ...
- Vue中computed,methods 和watch
Vue中的计算属性和方法属性 1.计算属性 computed 模版中可以使用表达式 <div id="example"> {{ message.split('').re ...
- vue中computed与watch的异同
一.computed 和 watch 都可以观察页面的数据变化.当处理页面的数据变化时,我们有时候很容易滥用watch. 而通常更好的办法是使用computed属性,而不是命令是的watch回调. ...
- vue中computed计算属性与methods对象中的this指针
this 指针问题 methods与computed中的this指针 应该指向的是它们自己,可是为什么this指针却可以访问data对象中的成员呢? 因为new Vue对象实例化后data中的成员和c ...
- vue中computed和watch的用法
computed用来监控自己定义的变量,该变量不在data里面声明,直接在computed里面定义,然后就可以在页面上进行双向数据绑定展示出结果或者用作其他处理: computed比较适合对多个变量或 ...
- vue中computed和watch的写法,以及区别
<template> <div class="print"> <div style="color: red"> <p ...
随机推荐
- MT【154】拉格朗日配方
(清华2017.4.29标准学术能力测试24) 设$x,y\in\mathbb{R}$,函数$f(x,y)=x^2+6y^2-2xy-14x-6y+72$的值域为$M$,则______ A.$1\in ...
- windows10配置virtualenv
1.从官网下载pip:https://pypi.python.org/pypi/pip/,下载完成之后,解压到一个文件夹,用CMD控制台进入解压目录,输入:python setup.py instal ...
- CSS垂直翻转与水平翻转
/*水平翻转*/ .flipx { -moz-transform:scaleX(-1); -webkit-transform:scaleX(-1); -o-transform:scaleX(-1); ...
- Hyper-V:无法打开虚拟机XXX,因为虚拟机监控程序未运行
异常处理汇总-服务器系列:http://www.cnblogs.com/dunitian/p/4522983.html 异常处理汇总-开发工具 http://www.cnblogs.com/duni ...
- css border 三角形
当元素的宽高都为0时,只写border,就会发现形成的正方形有4个三角形组成. .triangle { width: 0px; height: 0px; border: 20px solid tran ...
- css 选择符中的 >,+,~,=,^,$,*,|,:,空格 的意思
一,作为元素选择符 * 表示通配选择符 * {} // 所有元素 二,作为关系选择符 空格 表示包含选择符 a div{} // 被a元素包含的div > 表示子元素选择符 a > div ...
- 使用jquery.pjax实现SPA单页面应用
前面文章介绍了前端路由简单实现和Pjax入门方面的文章,今天来分享一个单页面应用神器jquery.pjax.js. HTML 我们准备一个加载div#loading,默认隐藏,ajax请求的时候才显示 ...
- axios 使用
<!DOCTYPE html> <html lang="en"> <head> {#导入静态文件#} {% load static %} < ...
- CAS (多线程保证原子性)
面试必问的CAS,你懂了吗? 置顶 2018年03月14日 22:29:19 程序员囧辉 阅读数:29612 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csd ...
- c#线程2
多线程中很有可能存在争夺一个变量资源而产生死锁或者不被期望的结果. 测试类; class TestClass { ; private object objLock = new object(); pu ...