Vue.js计算属性computed与watch(5)


Posted in Javascript onDecember 09, 2016

在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作。模板是为了描述视图的结构。在模板中放入太多的逻辑会让模板过重且难以维护。这就是为什么 Vue.js 将绑定表达式限制为一个表达式。如果需要多于一个表达式的逻辑,应当使用**计算属性**。

Vue实例的computed的属性

<div class="test">
    <p>原始的信息{{message}}</p>
    <p>计算后的信息{{ComputedMessage}}</p>
  </div>

js代码

var myVue = new Vue({
    el: ".test",
    data: {
      message:12
    },
    computed:{
      ComputedMessage:function () {
        return this.message+10;
      }
    }
  });

界面会显示 12 和 22
上述的方式是一种缓冲的实现的效果,这种实现的方式依赖于它的缓寸,计算得到的属性只有在相关依赖(message)改变的时候才会重新取值,这就意味着只要message没有发生改变的时候,多次访问ComputedMessage都不会再重新执行计算的这个属性。。

计算后的ComputedMessage属性始终是依赖于message的

通过调用函数实现同样的效果

<div class="test">
    <p>原始的信息{{message}}</p>
    <p>计算后的信息{{MessageFunction()}}</p>
  </div>

js代码

var myVue = new Vue({
    el: ".test",
    data: {
      message:12
    },
    methods:{
      MessageFunction:function () {
        return this.message+10;
      }
    }
  });

得到的结果和上面的结果是一样的,但是每次被重新渲染的时候都会被重新调用。
所以使用上述两种方式的时候,首先要确定你是否需要借助缓存

使用vue实例的watch

这个没有看懂呀
但是使用computed这个属性更加的方便和快捷

<div class="test">
    <p>原始的信息{{fullName}}</p>
  </div>

js代码

var myVue = new Vue({
    el: ".test",
    data: {
      firstName:"fur",
      lastName:"bool"
    },
    computed:{
      fullName:function () {
        return this.firstName+this.lastName
      }
    }
  });

而且你可以computed属性设置setter getter是默认就有的。

演示set和get的调用过程

<div class="test">
    <p>原始的信息{{fullName}}</p>
    <button @click="fu">test</button>
  </div>

js代码

var myVue = new Vue({
    el: ".test",
    data: {
      firstName:"fur",
      lastName:"bool",
      fullName:"sasas dsdsd dsds"
    },
    computed:{
      fullName:{
        get:function () {
          console.log("get")
          return this.firstName+this.lastName
        },
        set:function(value){
          var names=value.split(" ");
          this.firstName=names[0];
          this.lastName=names[names.length-1];
          console.log("set");
        }
      }
    },
    methods:{
      fu:function () {
        myVue.fullName="sasas dsdsd dsds";
        console.log(myVue.firstName);   //sasas
        console.log(myVue.lastName);  //dsds
      }
    }
  });

首先会输出get;

在点击按钮为fullName赋值的时候首先调用set 再调用get方法。

自定义的Watcher

虽然计算属性在大多数情况下是非常合适的,但是有的时候也需要自定义一个watcher。这是因为你想要在数据变化响应的时候,执行异步操作胡总和其他的操作是非常有用的。

Javascript 相关文章推荐
键盘控制事件应用教程大全
Nov 24 Javascript
jQuery温习篇 强大的JQuery选择器
Apr 24 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
Feb 04 Javascript
js实现按钮加背景图片常用方法
Nov 01 Javascript
JavaScript获取两个数组交集的方法
Jun 09 Javascript
通用无限极下拉菜单的实现代码
May 31 Javascript
JavaScript实现刷新不重记的倒计时
Aug 10 Javascript
AngularJS自定义服务与fliter的混合使用
Nov 24 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
May 14 Javascript
JS使用正则表达式找出最长连续子串长度
Oct 26 Javascript
vuex 中插件的编写案例解析
Jun 10 Javascript
vue实现前端列表多条件筛选
Oct 26 Javascript
JS新包管理工具yarn和npm的对比与使用入门
Dec 09 #Javascript
清除浏览器缓存的几种方法总结(必看)
Dec 09 #Javascript
vue.js绑定class和style样式(6)
Dec 09 #Javascript
浅析JavaScript动画模拟拖拽原理
Dec 09 #Javascript
JS定时器实现数值从0到10来回变化
Dec 09 #Javascript
原生js实现查询天气小应用
Dec 09 #Javascript
JS实现太极旋转思路分析
Dec 09 #Javascript
You might like
PHP中header和session_start前不能有输出原因分析
2013/01/11 PHP
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
用 JSON 处理缓存
2007/04/27 Javascript
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
2017/04/13 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
React学习笔记之条件渲染(一)
2017/07/02 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
layui点击导航栏刷新tab页的示例代码
2018/08/14 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
JS实现前端路由功能示例【原生路由】
2020/05/29 Javascript
[41:08]2014 DOTA2国际邀请赛中国区预选赛 HGT VS NE
2014/05/22 DOTA
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
Python2中的raw_input() 与 input()
2015/06/12 Python
python交互式图形编程实例(三)
2017/11/17 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
IRO美国官网:法国服装品牌
2018/03/06 全球购物
日本著名的服饰鞋帽综合类购物网站:MAGASEEK
2019/01/09 全球购物
存储过程和函数的区别
2013/05/28 面试题
阳光体育活动实施方案
2014/05/25 职场文书
先进事迹演讲稿
2014/09/01 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
四查四看整改措施
2014/09/19 职场文书
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫