详解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 继承实现方法
Aug 26 Javascript
javascript 学习笔记(一)DOM基本操作
Apr 08 Javascript
jQuery动态添加的元素绑定事件处理函数代码
Aug 02 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
Jan 09 Javascript
from 表单提交返回值用post或者是get方法实现
Aug 21 Javascript
jquery 删除字符串最后一个字符的方法解析
Feb 11 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
Oct 31 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
Sep 23 Javascript
纯js实现画一棵树的示例
Sep 05 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
Sep 20 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
Apr 07 Javascript
原生JS实现图片懒加载之页面性能优化
Apr 26 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连接Oracle for NT 远程数据库
2006/10/09 PHP
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
php 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
2013/06/24 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
jquery实现的简单二级菜单效果代码
2015/09/22 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
jQuery中animate的几种用法与注意事项
2016/12/12 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
pandas 选择某几列的方法
2018/07/03 Python
pandas值替换方法
2018/07/10 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
2018/07/25 Python
Python get获取页面cookie代码实例
2018/09/12 Python
python Event事件、进程池与线程池、协程解析
2019/10/25 Python
Jupyter notebook 远程配置及SSL加密教程
2020/04/14 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
纯CSS3实现滚动的齿轮动画效果
2014/06/05 HTML / CSS
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
医学院学生求职简历的自我评价
2013/10/24 职场文书
校园之星获奖感言
2014/01/29 职场文书
优秀员工演讲稿
2014/05/19 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
安全生产协议书
2016/03/22 职场文书
2016年村党支部公开承诺书
2016/03/24 职场文书
js前端图片加载异常兜底方案
2022/06/21 Javascript
Windows Server 版本 20H2 于 8 月 9 日停止支持,Win10 版本 21H1 将于 12 月结束支
2022/07/23 数码科技