详解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 相关文章推荐
javascript 有用的脚本函数
May 07 Javascript
Jquery AJAX POST与GET之间的区别
Nov 14 Javascript
js中split函数的使用方法说明
Dec 26 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
Jan 07 Javascript
jquery中ajax使用error调试错误的方法
Feb 08 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
Feb 13 Javascript
JS取模、取商及取整运算方法示例
Oct 13 Javascript
js实现淡入淡出轮播切换功能
Jan 13 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
Mar 01 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
Oct 10 jQuery
vue+springboot+element+vue-resource实现文件上传教程
Oct 21 Javascript
vue使用require.context实现动态注册路由
Dec 25 Vue.js
微信小程序将字符串生成二维码图片的操作方法
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中数组的三种排序方法分享
2012/05/07 PHP
php上传文件,创建递归目录的实例代码
2013/10/18 PHP
PHP中file_get_contents高?用法实例
2014/09/24 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
php中的buffer缓冲区用法分析
2019/05/31 PHP
jQuery调用WebService的实现代码
2011/06/19 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
2015/10/29 Javascript
JQuery 的跨域方法推荐_可跨任何网站
2016/05/18 Javascript
详解使用angularjs的ng-options时如何设置默认值(初始值)
2017/07/18 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
python实现网页链接提取的方法分享
2014/02/25 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
python绘制圆柱体的方法
2018/07/02 Python
python 3.7.0 下pillow安装方法
2018/08/27 Python
python微信撤回监测代码
2019/04/29 Python
python tkinter组件使用详解
2019/09/16 Python
Python如何爬取qq音乐歌词到本地
2020/06/01 Python
Python如何定义有默认参数的函数
2020/08/10 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
Html5踩坑记之mandMobile使用小记
2020/04/02 HTML / CSS
太阳镜仓库,售价20美元或更少:Sunglass Warehouse
2016/09/28 全球购物
美国NBA官方商店:NBA Store
2019/04/12 全球购物
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
优秀技术工人先进材料
2014/02/17 职场文书
护理专业自我评价
2015/03/11 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
趣味运动会通讯稿
2015/07/18 职场文书
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python