Vue学习笔记之计算属性与侦听器用法


Posted in Javascript onDecember 07, 2019

本文实例讲述了Vue计算属性与侦听器用法。分享给大家供大家参考,具体如下:

vue之所以加载速度非常块,是因为在数据改变时,它并不是将所有组件都刷新,而是在重用代码的基础上对发生改变的地方进行渲染。同时,还得益于计算属性的使用:

1、计算属性

像绑定普通属性一样在模板中绑定计算属性。例如reverseName属性依赖于firstName和lastName,当firstName或lastName发生改变时,依赖于它的 reverseName 也会更新。

利用函数方法也可以实现类似的效果,不同的是计算属性是基于它们的依赖进行缓存的。只有在它的相关依赖发生改变时才会重新求值。这就意味着只要 firstName 还没有发生改变,再次访问 reversedName 计算属性会立即返回之前的计算结果,而不必再次执行函数。相比之下,每当触发重新渲染时,调用方法将总会再次执行函数.

为什么需要缓存?假设我们有一个性能开销比较大的的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性 B 依赖于 A 。如果使用函数,每获得一次B就要调用一次函数进行计算,造成很大开销!

计算属性默认为get方法,也可以设定set方法,接收传入处理数据。例如传入originalName,set方法对其进行拆解并复制给firstName与lastName,并引起firstName与lastName改变,调用get()方法。

<div id="app">
    <p>{{originalName}}</p>
    <p>{{reverseName}}</p>
    <button @click="deal()">反转名字</button>
</div>
let vue=new Vue({
    el:'#app',
    data:{
      firstName:'',
      lastName:'',
      originalName:"super tory"
    },
    methods:{
      deal(){
        this.reverseName=this.originalName;
      }
    },
    computed:{            //计算属性钩子
      reverseName:{
        set(string){  //通过set方法对传入参数this.originalName进行操作
          let name=string.split(' ');
          this.firstName=name[1];
          this.lastName=name[0];
        },
        get(){      //通过get方法返回值
          return this.firstName+' '+this.lastName;
        }
      }
    }
});

2、侦听器watch

在Vue中提供一个钩子,侦听data中的某个变量是否改变,如果改变则执行响应函数。

<div id="app2">
  <input v-model="listen">
</div>
let vue2=new Vue({
  el:'#app2',
  data:{
    listen:''
  },
  watch:{      //定义侦听器钩子
    listen:function () {  //定义函数侦听listen的变化
      console.log("input内容发生改变");
    }
  }
});

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
javscript对象原型的一些看法
Sep 19 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
Jul 04 Javascript
from表单多个按钮提交用onclick跳转不同action
Apr 24 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
Mar 13 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
Jul 14 Javascript
jquery select插件异步实时搜索实例代码
Oct 20 jQuery
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
Jul 12 Javascript
jQuery AJAX与jQuery事件的分析讲解
Feb 18 jQuery
如何使用pm2快速将项目部署到远程服务器
Mar 12 Javascript
three.js利用卷积法如何实现物体描边效果
Nov 27 Javascript
js实现验证码功能
Jul 24 Javascript
解决vue $http的get和post请求跨域问题
Jun 07 Vue.js
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
Dec 07 #Javascript
JQuery样式与属性设置方法分析
Dec 07 #jQuery
JQuery常用简单动画操作方法回顾与总结
Dec 07 #jQuery
json解析大全 双引号、键值对不在一起的情况
Dec 06 #Javascript
js实现图片粘贴到网页
Dec 06 #Javascript
JavaScript中的函数申明、函数表达式、箭头函数
Dec 06 #Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
Dec 06 #Javascript
You might like
初学PHP的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
ThinkPHP框架实现数据增删改
2017/05/07 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
2017/11/07 PHP
js关于命名空间的函数实例
2015/02/05 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
微信小程序进行微信支付的步骤昂述
2016/12/01 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
js禁止表单重复提交
2017/08/29 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
基于datepicker定义自己的angular时间组件的示例
2018/03/14 Javascript
vue webpack实用技巧总结
2018/04/24 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
2020/03/11 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
详解uniapp的全局变量实现方式
2021/01/11 Javascript
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
详解django中使用定时任务的方法
2018/09/27 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
Python threading的使用方法解析
2019/08/28 Python
Python多线程获取返回值代码实例
2020/02/17 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
Python pandas如何向excel添加数据
2020/05/22 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
Silk’n激光脱毛器官网:silkn.com
2016/10/06 全球购物
九年级家长会邀请函
2014/01/15 职场文书
2014年关于两会精神的心得体会
2014/03/17 职场文书
单位工作证明格式模板
2014/10/04 职场文书
教育合作协议范本
2014/10/17 职场文书
学生检讨书范文
2015/01/27 职场文书
文艺部部长竞选稿
2015/11/21 职场文书
导游词之澳门玫瑰圣母堂
2019/12/03 职场文书
MySql存储过程之逻辑判断和条件控制
2021/05/26 MySQL