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 相关文章推荐
Jquery 组合form元素为json格式,asp.net反序列化
Jul 09 Javascript
javascript 判断中文字符长度的函数代码
Aug 27 Javascript
jQuery中ajax的使用与缓存问题的解决方法
Dec 19 Javascript
Nginx上传文件全部缓存解决方案
Aug 17 Javascript
JavaScript File分段上传
Mar 10 Javascript
js实现统计字符串中特定字符出现个数的方法
Aug 02 Javascript
微信公众号 摇一摇周边功能开发
Dec 08 Javascript
详解如何用webpack打包一个网站应用项目
Jul 12 Javascript
vue 指定组件缓存实例详解
Apr 01 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
Jul 29 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
Sep 04 Javascript
vue实现放大镜效果
Sep 17 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正则校验用户名介绍
2008/07/19 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
2012/12/07 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
Javascript中神奇的this
2016/01/20 Javascript
解析Javascript单例模式概念与实例
2016/12/05 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
Vue.directive使用注意(小结)
2018/08/31 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
2019/09/17 Javascript
[06:48]DOTA2-DPC中国联赛2月26日Recap集锦
2021/03/11 DOTA
python 自动提交和抓取网页
2009/07/13 Python
python追加元素到列表的方法
2015/07/28 Python
python实现FTP服务器服务的方法
2017/04/11 Python
Windows平台Python连接sqlite3数据库的方法分析
2017/07/12 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
python使用socket实现的传输demo示例【基于TCP协议】
2019/09/24 Python
使用Fabric自动化部署Django项目的实现
2019/09/27 Python
python字符串替换re.sub()实例解析
2020/02/09 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
python属于哪种语言
2020/08/16 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
CSS3简单实现照片墙
2014/12/12 HTML / CSS
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
个人简历自荐信
2013/12/05 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP
Python开发工具Pycharm的安装以及使用步骤总结
2021/06/24 Python