当前位置:网站首页>watch监听
watch监听
2022-08-11 11:51:00 【-加油】
1、普通监听
<body>
<div id="app">
<p>年龄:{
{
age}}</p>
<button @click="age++"> 修改age,增加年龄</button>
</div>
</body>
<script src="vue-2.6.12.js"></script>
<script>
const vm = new Vue({
el:'#app',
data(){
return{
age:18
}
},
watch:{
//如果age发生改变,这个函数就会运行
age:function(newValue,oldValue){
console.log(newValue);
}
//另一种简洁写法
// age(newValue,oldValue){
// console.log(newValue);
// }
}
})
</script>
注意这里当有setTimeout定时器时:
回调函数必须要用箭头函数。
回调函数是由js引擎调用的。
而箭头函数没有this指向,它会往外找,也就是age的this,age是vue所管理的函数,this指向该vue实例。
<body>
<div id="app">
<p>年龄:{
{
age}}</p>
<button @click="age++"> 修改age,增加年龄</button>
<p>temp:{
{
temp}}</p>
</div>
</body>
<script src="vue-2.6.12.js"></script>
<script>
const vm = new Vue({
el:'#app',
data(){
return{
age:18,
temp:18
}
},
watch:{
age(newValue,oldValue){
setTimeout(()=>{
console.log(newValue);
this.temp = newValue
},1000)
}
}
})
</script>
当不是箭头函数时:
2、监听对象
<body>
<div id="app">
<p>名字:{
{
person.name}}</p>
<button @click="person.name='ls'">修改名字</button>
</div>
</body>
<script src="vue-2.6.12.js"></script>
<script>
const vm = new Vue({
el:'#app',
data(){
return{
person:{
name:'zs',
sex:'男'
}
}
},
watch:{
//数据改变 但是没有执行这个函数 没有打印,没有进行watch监听
person:function(newValue,oldValue){
console.log(newValue);
}
//另一种简洁写法
// person(newValue,oldValue){
// console.log(newValue);
// }
}
})
</script>
需要使用到深度监听。
对象的所有属性都需要监听时用:
<body>
<div id="app">
<p>名字:{
{
person.name}}</p>
<button @click="person.name='ls'">修改名字</button>
</div>
</body>
<script src="vue-2.6.12.js"></script>
<script>
const vm = new Vue({
el:'#app',
data(){
return{
person:{
name:'zs',
sex:'男'
}
}
},
watch:{
//深度监听
person:{
handler:function(newValue,oldValue){
//拿到的是新的对象
console.log(newValue);
console.log(newValue.name);
console.log(newValue.sex);
},
//监听器会一层一层的向下遍历,给对象每个属性添加一个监听器
deep:true
}
}
})
</script>
上述例子监听对象的所有属性,如person的name,sex等等属性。不论是哪个属性变化都触发handler,监听了所有属性。
当我们只想监听对象的某个属性。
<body>
<div id="app">
<p>名字:{
{
person.name}}</p>
<button @click="person.name='ls'">修改名字</button>
</div>
</body>
<script src="vue-2.6.12.js"></script>
<script>
const vm = new Vue({
el:'#app',
data(){
return{
person:{
name:'zs',
sex:'男'
}
}
},
watch:{
//深度监听
'person.name':{
handler:function(newValue,oldValue){
//输出name的值
console.log(newValue);
},
deep:true
}
}
})
</script>
只监听对象person的name属性,name变化,,函数运行,sex(其他属性)变化,不会触发.
边栏推荐
- VirtualLab:Ince-Gaussian光束产生涡旋阵列激光束的观测
- 黑海港口外运农产品问题联合协调中心:正努力加速粮食外运
- Flutter经验整理
- elemntUI限制时间选择器不能跨月并且不大于未来时间
- pip安装后仍有ImportError No module named XX问题解决
- From Douyin to Volcano Engine——Seeing the Evolution and Opportunities of Streaming Media Technology
- 重要消息丨.NET Core 3.1 将于今年12月13日结束支持
- 公共管理学试题及参考答案
- MySQL --- storage engine
- 案例复现,带你分析Priority Blocking Queue比较器异常导致的NPE问题
猜你喜欢

如何用100元制作一块全志V853的AI 开发板

二叉树详解

VirtualLab: Ince - array of laser Gaussian beam generated vortex observation
![[Deep Learning] Note 2 - The accuracy of the model in the test set is greater than that in the training set](/img/dd/0eeab5437dec9f56d9e5100a720004.png)
[Deep Learning] Note 2 - The accuracy of the model in the test set is greater than that in the training set

RTP协议浅析

vending machine

【五一特刊】FPGA零基础学习:VGA协议驱动设计

编程手册管理软件-涉及各类编程语言

Flutter 教程之 Kotlin 多平台与 Flutter,为您的应用选择哪一个

文件上传
随机推荐
VirtualLab:Ince-Gaussian光束产生涡旋阵列激光束的观测
Jetpack Compose学习(9)——Compose中的列表控件(LazyRow和LazyColumn)
去年今日我凭借这份文档,摇身一变成了被BAT大牛们看中的幸运儿
【流式细胞仪软件】上海道宁为您带来FCS Express,让您轻松缩小流式细胞术和结果之间的差距
ST表和区间最值
Volatile关键字的作用
SD8016原厂单电池锂离子电池和锂聚合物电池充电IC
img图片加载错误时显示默认图片
02-JS变量、数据类型及运算符
HM升压IC芯片代理商
After pip installation, there is still ImportError No module named XX problem solved
关于b/s技术的一些思考--模板技术
性能测试的环境以及测试数据构造
Go编译原理系列10(逃逸分析)
WPF 实现内阴影
PG--核心技术--HOT
B端产品需求分析与优先级判断
路测数据合并
闪灯IC,可按要求开发各种规格闪灯IC,单片机方案开发
条件竞争 && pipe_buffer + 堆喷射