-
2020-03-21 10:11:15
vue提供了watch方法,用于监听实例内data数据的变化。通常写法是:
new Vue({ data: { count: 10, blog:{ title:'my-blog', categories:[] } }, watch: { count: function (newval, oldVal) { console.log(`new: %s, old: %s`, newVal, oldVal); } } })
上述情况里data中的count属性可以直接监听,但是如果需要监听的数据是对象内的某一属性值的变化,直接watch对象blog是检测不到变化的,这是因为blog这个对象的指向并没有发生改变。有几个解决方法
1.深度监测
new Vue({ data: { count: 10, blog:{ title:'my-blog', categories:[] } }, watch: { blog:{ handler(newVal,oldVal){ console.log(`new: ${newVal}, old: ${oldVal}`); }, deep:true } } })
里面的deep设为了true,这样的话,如果修改了这个blog中的任何一个属性,都会执行handler这个方法。不过这样会造成更多的性能开销,尤其是对象里面属性过多,结构嵌套过深的时候。而且有时候我们就只想关心这个对象中的某个特定属性,这个时候可以这样
2.用字符串来表示对象的属性调用
new Vue({ data: { count: 10, blog:{ title:'my-blog', categories:[] } }, watch: { 'blog.categories'(newVal, oldVal) { console.log(`new:${newVal}, old:${oldVal}`); }, } })
3.使用computed计算属性
new Vue({ data: { count: 10, blog:{ title:'my-blog', categories:[] } }, computed: { categories() { return this.blog.categories; } }, watch: { categories(newVal, oldVal) { console.log(`new:${newVal}, old:${oldVal}`); }, }, })
更多相关内容 -
vue watch监听对象及对应值的变化详解
2020-11-26 13:58:43a(val, oldVal){//普通的watch监听 console.log("a: "+val, oldVal); }, b:{//深度监听,可监听到对象、数组的变化 handler(val, oldVal){ console.log("b.c: "+val.c, oldVal.c);//但是这两个值打印出来却都... -
vue 中 watch 监听方法的写法
2022-03-25 17:13:28描述 :监听form表单中一个值的变化,清空某个值 watch:{ 'form.callPoliceSort':function(newValue){ // 监听form表单中callPoliceSort字段值的变化,变化了将需要清空的值进行清空 console.log('newValue',... -
Vue中watch监听data函数中数据改变的三种方法
2021-12-17 12:48:39关于Vue:Vue中watch监听data函数中数据改变的三种方法在Vue中有一个watch方法可用于监听数据的改变,避免重复添加监听函数,watch中有三种监听数据的方式:
1、常用型(浅层监听)
如此即可监听loading值的变化,并进行相应操作。
2、深层监听(利用deep属性)
这样利用deep属性,将deep设为true,则可进行深层监听,只要modalForm中任意一个属性的值发生改变,则都会调用handler函数,当然该函数名可随意。
3、深层监听某一个特定属性(用字符串表示对象属性的调用)
此时只会监听modalForm里面的model属性,当他的值发生改变时才会执行回调函数。
4、利用computed计算属性
此时在添加了计算属性后,可以像浅层监听一样的方式监听深层的model属性值的改变。
-
Vue中watch监听路由的使用场景
2021-04-21 10:03:40created(){ if(this.$route.params && this.$route.params.id){ //从路径获取id值 const id =this.$route.params.id //调用根据id查询的方法 ... }else{//路径中没有id //清空清单 ...created(){ if(this.$route.params && this.$route.params.id){ //从路径获取id值 const id =this.$route.params.id //调用根据id查询的方法 this.getInfo(id) }else{//路径中没有id //清空清单 this.teacher={} } }
当进行路由跳转,两次都跳转到一个页面的时候,在页面渲染之前执行的created()方法只会在第一次的时候执行
如上图代码第一次跳转的时候
如图所示路径中是有id值的,所以执行上述代码中if中的代码片段
当前几添加讲师的时候
如图所示是没有id值的,应该执行else中的代码片段,但是,前面已经说了第二次执行的时候不会执行created()的所以不会执行else中的代码片段,所以得使用watch监听器
修改代码
created(){ this.init() }, */ watch:{//路由监听 $route(to,from){//路由变化方式,路由发生变化的时候,方法就会执行 this.init() } }, methods:{ init(){ //判断路径中是否有id'值 if(this.$route.params && this.$route.params.id){ //从路径获取id值 const id =this.$route.params.id //调用根据id查询的方法 this.getInfo(id) }else{//路径中没有id //清空清单 this.teacher={} } }, }
watch路由监听就是当路径发生改变得时候执行
这样做的话,当第一次点击有id值的时候执行created->init()中的if中的方法,当再此页面中点击修改的时候,路由发生了改变,则被 watch路由监听器监听执行监听器中的方法,监听器中的方法与created中的一样,只不过是路径中没有id'值了,所以执行的是init中的else语句。从而实现执行this.teacher={} -
vue 子组件watch监听不到prop的解决
2021-01-21 11:03:07在vue项目中,父组件通过prop给子组件传值时,如果prop值是从服务器端获取,则父组件可能会传给子组件一个默认值(服务端数据还未及时获取),那么,我们就需要实时watch这个prop值,一旦prop值有更新,将立即通知子... -
vue中的watch监听数据变化及watch中各属性的详解
2020-10-18 01:16:08主要介绍了vue中的watch监听数据变化及watch中的immediate、handler和deep属性详解,本文大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧 -
解决vue中watch监听第一次数据变化失败的情况
2021-08-09 09:04:08项目中,第一次进去数据不渲染,第二次才渲染。 watch: { 'detail':{ immediate: true, // immediate选项可以开启首次赋值监听 handler(newVal, oldVal) { console.log(newVal, oldVal) this.tableData = ... -
vue中watch监听浏览器窗口大小的改变
2020-12-23 11:31:12<script> export default { data() { return { screenWidth: document.... watch: { screenWidth(newVal) { console.log('newVal', newVal); // console.log('old', old); // this.boxWscreenWidthidth -
vue中watch监听数据改变
2019-04-17 13:10:06首先确认 watch是一个对象,一定要当成对象来用。 对象就有键,有值。 键:就是你要监控的那个家伙,比如说$route,这个就是要监控路由的变化。或者是data中的某个变量。 值可以是函数:就是当你监控的家伙变化时,... -
vue中watch监听对象中某个属性
2022-01-09 19:55:35新建 userinfo = { name: "小明", age: "18", } ...vue中watch监听name的方法 可以结合计算属性的方法实现 { ...... watch: { nm () { console.log(this.nm) } }, computed: { nm () { return this.user -
vue的watch监听
2021-12-23 10:21:39目录一、watch的直接监听1、简单变量的监听2、对象中变量的监听3、监听值为处理函数二、watch的handler函数监听1、简单变量的监听(handler函数监听)2、对象中变量的监听(handler函数+deep属性监听)3、变量的初始... -
vue中watch监听器的用法,deep、immediate、flush
2022-04-28 13:54:24一、watch 默认是浅层,使用deep深层监听 被侦听的 property,仅在被赋新值时,才会触发回调函数——而嵌套 property 的变化不会触发。如果想侦听所有嵌套的变更,你需要深层侦听器:设置deep: true export default ... -
Vue中watch监听路由地址的变化
2020-04-19 19:45:15请陛下批阅 <!DOCTYPE html> <html lang="en"> <head>...meta charset="UTF-8">...watch监听路由地址的改变</title> <script src="../../vue/vue-v2.6.11.js"></scr... -
vue watch普通监听和深度监听实例详解(数组和对象)
2020-10-18 05:16:38主要介绍了vue watch普通监听和深度监听(数组和对象),文中单独通过代码给大家介绍了vue watch 深度监听的方法,感兴趣的朋友一起看看吧 -
如何用vue中watch监听input组件的变化
2019-08-27 18:46:361.https://www.jb51.net/article/123999.htm 2.http://www.imooc.com/wenda/detail/522541 -
vue中watch和computed为什么能监听到数据的改变以及不同之处
2020-10-15 20:11:27主要介绍了vue中watch和computed为什么能监听到数据的改变以及不同之处,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 -
vue中watch监听变量变化时this指向问题
2019-04-09 09:32:56那么就说明我们在箭头函数中引用的this不再是vue实例。 使用普通函数时this才是vueComponent对象。所以大家在使用es6特性的时候一定要注意。在vue的内部一定要注意箭头函数对于this对象的影响。当然如果你非要使用... -
vue中watch监听页面窗口高度
2021-04-11 18:17:29监听window.onresize事件 watch: { fullHeight (val) { if(!this.timer) { this.fullHeight = val this.timer = true let that = this setTimeout(function (){ that.timer = false },400) } } } -
Vue中watch监听第一次不触发、深度监听
2022-04-26 16:01:53第一次不触发 一:handler:其值是一个回调函数。...例如:我将父组件中的WatchId传递到这个子组件页面我要根据id来获取数据watch监听不到一次的数据变化,下面是我的例子 <script> export defaul -
Vue数据监听方法watch的使用
2020-08-27 18:44:25主要介绍了Vue数据监听方法watch的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
vue中watch监听报错问题
2021-05-11 18:42:06通过props将list数据传过来后,通过watch监听变化,并通知变化赋值。 如上写法,值是都获得到了,但是报个错,所以还是要处理的。于是将数据打印了下 console.log(newVal[0][0]) //undefined //但是两个值,... -
vue中watch监听路由传来的参数变化
2021-08-12 15:54:51一个组件内写了个编程路由,通过交互触发 this.$router.push({ name: "Result", query: { ...在接收参数的路由组件中watch内 watch: { // 监视搜索词变化 "$route.query.title": { immediate: true, -
Vue开发之watch监听数组、对象、变量操作分析
2021-01-19 17:25:40本文实例讲述了Vue开发之watch监听数组、对象、变量操作。分享给大家供大家参考,具体如下: 1.普通的watch data() { return { frontPoints: 0 } }, watch: { frontPoints(newValue, oldValue) { console.log... -
关于vue中watch监听的几种使用方式
2020-08-21 12:01:211.监听变量 watch: { totalCount(value) { const totalPage = Math.ceil(value / this.pageSize); if (this.pageNo > totalPage) { this.pageNo = Math.max(1, totalPage); } } }, 2.监听对象 deep:... -
vue中watch监听变化
2019-11-08 11:54:12一、普通监听 监听一个变量值的变化 <template> <input v-model='value' /> </template> <script> export default { data(){ ... watch:{ value(newVal,oldVal){ ... -
Vue 中 watch 监听的对象变化后前后值一样及解决方案
2021-11-08 10:58:451.场景:项目中的需求是根据基金代码的变化去获取基金对应的信息还处理一些业务逻辑,watch ,但是如下图所示,在监听函数中的新值和旧值是一样的 所以没有按需走相关代码逻辑,是否跟引用数据类型的指向有关?... -
vue中watch监听高级用法
2022-04-01 09:53:15一、watch监听默认绑定,页面首次加载时候,是不会执行,只有值发生改变的时候才会执行 如果想立即执行则 watch:{ name:{ handler(){ //执行的代码 }, immediate:true //true就表示会立即执行 } } 二、deep属性...