详解vue2.0监听属性的使用心得及搭配计算属性的使用


Posted in Javascript onJuly 18, 2018

我们在工作中常常需要监听某一个属性值的变化,这个时候我们就需要用到了监听属性watch,在这里我总结watch属性的三种场景使用希望对你有所帮助:

1.基础版监听:

场景如下:输入框输入你的年龄,如果年龄在0-15岁提示信息:你还是个小孩,如果年龄在 15-25岁,提示信息:你已经是个少年,如果年龄在25岁以上,提示信息:你已经长大了。根据需求配合监听属性我们得到下面的代码:

<template>
 <div id="app">
  年?:<input type="number" v-model="age"><br>
  提示信息:<span>{{infoMsg}}</span>
 </div>
</template>

<script>
export default {
 data() {
  return {
   age: "",
   infoMsg:""
  }
 },
 watch:{
  age:function(val,oldval){
   if(val>0 && val<15){
    this.infoMsg="你还是个小孩"
   }else if(val>15 && val<25){
    this.infoMsg="你已经是个少年"
   }else{
    this.infoMsg="你已经长大了"
   }
  }
 }
}
</script>

这里需要特别说明一下的是:坚挺属性方法中的两个参数分别代表的含义:第一个val是当面正在监听的属性的值,oldval是属性改变之前的值,由于这是形参的原因,参数的名字可以自己定义,但是但是参数所代表的含义是不会变化的。

2.进阶版监听:

下面我们改变一下需求:基础规则不变,但是因为后台数据库的更改(画个圈圈咀咒他)我们需要提交一个这样的数据结构

data() {
  return {
   info: {
    age: ""
   },
   infoMsg: ""
  };
 },

由于我们监听的是对象info中的属性age值的变化,所以我们需要使用到的是深度监听,具体代码如下:

<template>
 <div id="app">
  年?:<input type="number" v-model="info.age"><br>
  提示信息:<span>{{infoMsg}}</span>
 </div>
</template>

<script>
export default {
 data() {
  return {
   info: {
    age: ""
   },
   infoMsg: ""
  };
 },
 watch: {
  info: {
   handler: function(val, oldval) {
    var that = this;
    if (val.age > 0 && val.age < 15) {
     that.infoMsg = "你还是个小孩";
    } else if (val.age > 15 && val.age < 25) {
     that.infoMsg = "你已经是个少年";
    } else {
     that.infoMsg = "你已经长大了";
    }
   },
   deep: true
  }
 }
};
</script>

在这里需要注意的有两点:1,这里的function不能使用箭头函数替代,如果使用箭头函数的话,this的指向会是全局。2,你会注意到这里多加入一个属性是deep,它的含义表示是否开启深度监听,如果开启值为true,反之为false。

3.最高级监听:

针对第二个案例不知道你有没有发现一个问题:我们监听的是一个对象里面某个属性的变化,但是如果当这个对象里面有很多个值的时候,虽然也可以使用第二种方法进行监听,但是这将会是对资源的一种极大的浪费,身为一个严谨的程序员(微笑脸),绝对不能允许这样的事情发生,所以我们可以结合computed(计算属性)对上面的代码进行优化:

<template>
 <div id="app">
  年?:<input type="number" v-model="info.age"><br>
  提示信息:<span>{{infoMsg}}</span>
 </div>
</template>
<script>
export default {
 data() {
  return {
   info: {
    age: "",
    name: "",
    hobit: ""
   },
   infoMsg: ""
  };
 },
 computed: {
  ageval: function() {
   return this.info.age;
  }
 },
 watch: {
  ageval: {
   handler: function(val, oldval) {
    var that = this;
    if (val > 0 && val < 15) {
     that.infoMsg = "你还是个小孩";
    } else if (val > 15 && val < 25) {
     that.infoMsg = "你已经是个少年";
    } else {
     that.infoMsg = "你已经长大了";
    }
   },
   deep: true
  }
 }
};
</script>

通过上面的我们看出,这次我们监听的是计算属性ageval,而计算属性返回的则是info对象中age的值,与第二次的代码进行比较我们可以发现两次代码中监听的一个是对象info,一个是info对象中age的值,性能大大增强,这就是我们期待的结果了。

总结

以上所述是小编给大家介绍的vue2.0监听属性的使用心得及搭配计算属性的使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jQuery 行背景颜色的交替显示(隔行变色)实现代码
Dec 13 Javascript
jQuery的一些特性和用法整理小结
Jan 13 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
Aug 10 Javascript
window.open关于浏览器拦截问题分析及解决方法
Feb 05 Javascript
Javascript遍历table中的元素示例代码
Jul 08 Javascript
JavaScript实现找出字符串中第一个不重复的字符
Sep 03 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
Oct 11 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
Aug 17 Javascript
微信小程序 SocketIO 实例讲解
Oct 13 Javascript
AngularJS中scope的绑定策略实例分析
Oct 30 Javascript
layer实现关闭弹出层刷新父界面功能详解
Nov 15 Javascript
AngularJS与后端php的数据交互方法
Aug 13 Javascript
微信小程序将字符串生成二维码图片的操作方法
Jul 17 #Javascript
使用Vue实现图片上传的三种方式
Jul 17 #Javascript
vue的token刷新处理的方法
Jul 17 #Javascript
vue 权限认证token的实现方法
Jul 17 #Javascript
vue 实现axios拦截、页面跳转和token 验证
Jul 17 #Javascript
详解webpack import()动态加载模块踩坑
Jul 17 #Javascript
vue-router中的hash和history两种模式的区别
Jul 17 #Javascript
You might like
php日历[测试通过]
2008/03/27 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
2012/05/31 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
实现PHP搜索加分页
2016/10/12 PHP
js自带函数备忘 数组
2006/12/29 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
RequireJS入门一之实现第一个例子
2015/09/30 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
2016/05/03 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
Vue 2中ref属性的使用方法及注意事项
2017/06/12 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
Python pickle类库介绍(对象序列化和反序列化)
2014/11/21 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
python中import与from方法总结(推荐)
2019/03/21 Python
python字符串Intern机制详解
2019/07/01 Python
python脚本后台执行方式
2019/12/21 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
python+flask编写一个简单的登录接口
2020/11/13 Python
战略合作意向书范本
2014/04/01 职场文书
优秀学生评语大全
2014/04/25 职场文书
环境整治工作方案
2014/05/18 职场文书
2014年团队工作总结
2014/11/24 职场文书
搞笑的婚礼主持词
2015/06/29 职场文书
2016见义勇为事迹材料汇总
2016/03/01 职场文书
Java使用Unsafe类的示例详解
2021/09/25 Java/Android
python中pycryto实现数据加密
2022/04/29 Python