vue中watch的实际开发学习笔记
作者:奶厂小程 发布时间:2024-04-30 10:41:15
标签:vue,watch,开发
前言
本文主要是积累一下在使用前端的watch开发过程中遇到的问题点和经验。
一、watch是什么
根据本人的理解,它就是一个 * ,就是说监听的某个数据发生了变化,那么它就会执行相对应的函数。它主要使用在哪些场景呢,比如:一个数据影响着多个数据的业务。
watch:{ // 当这个workType发生改变时,就是1个数据的改变,就会影响到type5和foll的改变
'queryParams.workType':function (newName,oldName){
if(newName==1){
this.type5 = this.type3,
this.foll = true
}else if(newName==2){
this.type5 = this.type4,
this.foll = false
}
}
},
二、watch不同的实际使用场景开发案例
1.场景1:加载完成后登录监听
代码如下:
watch: {
isLoading (newVal, oldVal) { //1. 原来的值,和现在的值,是否有变化,如果有变化,触发这个函数
console.log('2 isLoading newVal is ', newVal, ' , oldVal is ', oldVal)
//2. 当加载完成时, 还需要判断用户是否已登录
const username = getLoginedUsername(this.$store)
if (username != undefined && username != null) {
// 已登录时, 跳转首页
toHomePage(this)
}
}
},
computed: {
isLoading () {
return isLoading(this.$store)
}
},
import { isLoading, getLoginedUsername } from 'utils/utils'
2.场景2:前面不同的选择框,影响下面的不同的选择框的选项内容
1.data的代码如下:
data() {
return {
verifyData: this.propData,
editBoxShow: false,
type3: [{
worksRegion: '0',
label: '牛奶'
},{
worksRegion:"1",
label: "面包"
},
{
worksRegion:"3",
label: "水果"
}
],
type4: [{
worksRegion: '0',
label: '炸鸡'
},{
worksRegion:"1",
label: "汉堡"
},{
worksRegion:"2",
label: "可乐"
},
{
worksRegion:"3",
label: "北京烤鸭"
}
],
type5:[],
queryParams:{
id:"",
workType:'',//1开发 , 2 测试
foll:true
},
};
}
2.watch的监听
watch:{ // 当这个workType发生改变时,就是1个数据的改变,就会影响到type5和foll的改变
'queryParams.workType':function (newName,oldName){
if(newName==1){
this.type5 = this.type3,
this.foll = true
}else if(newName==2){
this.type5 = this.type4,
this.foll = false
}
}
},
3.场景效果描述
比如: 第1个选框:开发;
第2个选框: A,B,C
比如: 第1个选框:测试;
第2个选框: A,B,C,D
由上所示,当第1个选框,选择“开发”选项时,则第2个选框出现的选项内容为ABC;当第1个选框,选择“测试”选项时,则第2个选框出现的选项内容为ABCD;这时就实现了当初的上一个不同选项出现下一个不同的选项内容的效果了。
原理描述:它是主要是通过判断queryParams的里面的workType的参数的变化,来进行监听的,如果当用户点了开发这个选项,那么这个workType的newName就是1了,所以就触发了watch里面的这个函数了,那么这里就可以进行业务方面的处理即可。
3.场景3:深度监听
说明:
handler: 固定方法触发
deep: 开启深度监听
immediate: 页面初始化时handler立即执行一次
data(){
return {
user: {
userNo: "",
sex: ""
}
}
},
// 监听整对象
watch: {
// 监听整个对象,对象里的每个属性值的变化都会执行handler,执行后获取的 newVal 值和 oldVal 值是一样的
user: {
handler(newVal, oldVal){
console.log(newVal, oldVal);
},
deep: true,
immediate: true
}
}
watch: {
// 监听对象的某个属性,被监听的属性值发生变化就会执行函数,但获取的 newVal 值和 oldVal 值不一样
'user.userNo': {
handler(newVal, oldVal){
console.log(newVal, oldVal);
},
deep: true,
immediate: true
}
}
4.场景4:赋值使用
watch: {
traysNos (newVal, oldVal) {
if ((newVal && !oldVal) || (newVal && oldVal && newVal !== oldVal)) {
this.filterDeliverysOutLists = []
this.deliverysOutsList = this.fullsDeliverysOutsLists
}
}
},
5.场景5:改变标记的true和false
data () {
return {
loading: false,
submitsCheck: true,
}
},
watch: {
'order.traysNos' (val) {
if (val == null || val == '') {
this.submitsCheck = true
} else if (val) {
this.submitsCheck = false
}
}
},
6.场景6:页面的跳转
watch: {
reservesNo (newVal, oldVal) {
if ((newVal && !oldVal) || (newVal && oldVal && newVal !== oldVal)) {
this.reservesNo = newVal // 获取到新值
this.$router.replace({ // 跳转,注意,这种跳转,是不可以回退的
query: {
reservesNo: this.reservesNo // 传新值
}
})
this.findOrderNo() // 执行其他的函数
}
}
},
这个主要是深度监听的使用,如何监听某个对象中的某个属性的变化,就是上面这个案例,看业务需求来进行使用。
补充:watch简写形式
如果只是监听单个简单的数据,使用watch的简写形式就可以满足需求。
代码如下:
<script>
export default {
name: "Home",
data() {
return {
text: ""
};
},
watch: {
text(newVal, oldVal) {
}
},
};
</script>
来源:https://blog.csdn.net/weixin_46442877/article/details/127732967


猜你喜欢
- 运行环境: CentOS6.5_x64Python版本 : 2.6使用pyinstaller打包pyinstaller可以将python程序
- 谈到比特币,我们都知道挖矿,有些人并不太明白挖矿的含义。这里的挖矿其实就是哈希的碰撞,举个简单例子:import hashlibx = 11
- 大多数网站维护都采用“多人协作,共同管理”方式。某个人负责一个(或者多个)栏目,他只能对他负责的栏目进
- 一、常见反爬机制及其破解方式封禁IP,使用cookie等前面文章已经讲过现在主要将下面的:~ 验证码 —> 文字验证码 —> O
- //主键 ALTER TABLE tablename add new_field_id int(5) UNSIGNED DEFAULT 0
- ===操作符: 要是两个值类型不同,返回false 要是两个值都是number类型,并且数值相同,返回true 要是两个值都是stirng,
- 首页url与视图函数的映射是通过@app.route()装饰器实现的。只有一个斜杠代表的是根目录——
- 在对数值进行格式化的时候,一个常见的问题是按照千分位格式化,网上对这个问题已经有很多种解决方法了,还可以利用Array.prototype.
- 前言全局共享内存则主要是 MySQL Instance(mysqld进程)以及底层存储引擎用来暂存各种全局运算及可共享的暂存信息,如存储查询
- setup语法糖 最大好处就是所有声明部分皆可直接使用,无需return出去注意:部分功能还不完善,如:name、render还需
- 前言:[学习SQL SERVER 2005系列]准备把学习2005的一些心得整理出来,和大家分享,共同学习一起提高。sql2005 精简版下
- 本文实例为大家分享了Python实现简单扫雷游戏的具体代码,供大家参考,具体内容如下#coding: utf-8__note__ = &qu
- 本段源码可以学习的地方:1. 考虑到效率问题,可以通过上下文的机制,在属性被访问的时候临时构建;2. 可以重写一些魔术方法,比如 __new
- 日志文件一般是按天产生,则通过在程序中判断文件的产生日期与当前时间,更换监控的日志文件程序只是简单的示例一下,监控test1.log 10秒
- 由于最近需要做项目,需要进行分词等,查了资料之后,发现python NLTK很强大,于是就想试试看。在网上找了很多安装资料,都不太完整,下载
- 首先说一下 ,我是用的anaconda3装的pytorch为了方便建议你也安装一个。其实这个挺简单的,你找找“c:/user/你的用户名/”
- 修改 index.js 内容,写一些 ES6 的语法:const arr = [ new Promise(() => {}
- 需求:对于一个python list 或者numpy数组,我需要找到这个list中最大的K个数及其对应的下标。解决方式:1. 可以构造字典通
- 前言1.本文使用的是mysql8.0版本与5.0版本相比:导包方式相同,后面代码中的注册驱动方式不同1.mac与pc的idea菜单和图标不是
- 通过本文给大家介绍Python3控制路由器——使用requests重启极路由.py的相关知识,代码写了相应的注释,以后再写成可以方便调用的模